108 INTEGER(INTG),
INTENT(IN) :: SOLUTION_METHOD
109 INTEGER(INTG),
INTENT(OUT) :: ERR
114 enters(
"DiffusionDiffusion_EquationsSetSolutionMethodSet",err,error,*999)
116 IF(
ASSOCIATED(equations_set))
THEN 117 IF(.NOT.
ALLOCATED(equations_set%SPECIFICATION))
THEN 118 CALL flagerror(
"Equations set specification is not allocated.",err,error,*999)
119 ELSE IF(
SIZE(equations_set%SPECIFICATION,1)/=3)
THEN 120 CALL flagerror(
"Equations set specification must have three entries for a "// &
121 &
"diffusion-diffusion type equations set.",err,error,*999)
123 SELECT CASE(equations_set%SPECIFICATION(3))
125 SELECT CASE(solution_method)
129 CALL flagerror(
"Not implemented.",err,error,*999)
131 CALL flagerror(
"Not implemented.",err,error,*999)
133 CALL flagerror(
"Not implemented.",err,error,*999)
135 CALL flagerror(
"Not implemented.",err,error,*999)
137 CALL flagerror(
"Not implemented.",err,error,*999)
139 local_error=
"The specified solution method of "//
trim(
number_to_vstring(solution_method,
"*",err,error))//
" is invalid." 140 CALL flagerror(local_error,err,error,*999)
143 local_error=
"Equations set subtype of "//
trim(
number_to_vstring(equations_set%SPECIFICATION(3),
"*",err,error))// &
144 &
" is not valid for a diffusion-diffusion equation type of a multi physics equations set class." 145 CALL flagerror(local_error,err,error,*999)
148 CALL flagerror(
"Equations set is not associated.",err,error,*999)
151 exits(
"DiffusionDiffusion_EquationsSetSolutionMethodSet")
153 999
errors(
"DiffusionDiffusion_EquationsSetSolutionMethodSet",err,error)
154 exits(
"DiffusionDiffusion_EquationsSetSolutionMethodSet")
169 INTEGER(INTG),
INTENT(OUT) :: ERR
173 enters(
"DIFFUSION_DIFFUSION_EQUATIONS_SET_SETUP",err,error,*999)
175 CALL flagerror(
"Not implemented.",err,error,*999)
177 exits(
"DIFFUSION_DIFFUSION_EQUATIONS_SET_SETUP")
179 999 errorsexits(
"DIFFUSION_DIFFUSION_EQUATIONS_SET_SETUP",err,error)
193 INTEGER(INTG),
INTENT(IN) :: ELEMENT_NUMBER
194 INTEGER(INTG),
INTENT(OUT) :: ERR
198 enters(
"DiffusionDiffusion_FiniteElementCalculate",err,error,*999)
200 CALL flagerror(
"Not implemented.",err,error,*999)
202 exits(
"DiffusionDiffusion_FiniteElementCalculate")
204 999 errorsexits(
"DiffusionDiffusion_FiniteElementCalculate",err,error)
218 INTEGER(INTG),
INTENT(IN) :: specification(:)
219 INTEGER(INTG),
INTENT(OUT) :: err
222 enters(
"DiffusionDiffusion_EquationsSetSpecificationSet",err,error,*999)
224 CALL flagerror(
"Not implemented.",err,error,*999)
226 exits(
"DiffusionDiffusion_EquationsSetSpecificationSet")
228 999
errors(
"DiffusionDiffusion_EquationsSetSpecificationSet",err,error)
229 exits(
"DiffusionDiffusion_EquationsSetSpecificationSet")
243 INTEGER(INTG),
INTENT(IN) :: problemSpecification(:)
244 INTEGER(INTG),
INTENT(OUT) :: err
248 INTEGER(INTG) :: problemSubtype
250 enters(
"DiffusionDiffusion_ProblemSpecificationSet",err,error,*999)
252 IF(
ASSOCIATED(problem))
THEN 253 IF(
SIZE(problemspecification,1)==3)
THEN 254 problemsubtype=problemspecification(3)
255 SELECT CASE(problemsubtype)
259 localerror=
"The third problem specification of "//
trim(
numbertovstring(problemsubtype,
"*",err,error))// &
260 &
" is not valid for a coupled diffusion-diffusion type of a multi physics problem." 261 CALL flagerror(localerror,err,error,*999)
263 IF(
ALLOCATED(problem%specification))
THEN 264 CALL flagerror(
"Problem specification is already allocated.",err,error,*999)
266 ALLOCATE(problem%specification(3),stat=err)
267 IF(err/=0)
CALL flagerror(
"Could not allocate problem specification.",err,error,*999)
272 CALL flagerror(
"Diffusion-diffusion problem specification must have three elements.",err,error,*999)
275 CALL flagerror(
"Problem is not associated.",err,error,*999)
278 exits(
"DiffusionDiffusion_ProblemSpecificationSet")
280 999
errors(
"DiffusionDiffusion_ProblemSpecificationSet",err,error)
281 exits(
"DiffusionDiffusion_ProblemSpecificationSet")
296 INTEGER(INTG),
INTENT(OUT) :: ERR
300 TYPE(
solver_type),
POINTER :: SOLVER_DIFFUSION_ONE, SOLVER_DIFFUSION_TWO
301 TYPE(
solver_equations_type),
POINTER :: SOLVER_EQUATIONS_DIFFUSION_ONE, SOLVER_EQUATIONS_DIFFUSION_TWO
305 enters(
"DIFFUSION_DIFFUSION_PROBLEM_SETUP",err,error,*999)
307 NULLIFY(control_loop)
309 NULLIFY(solver_diffusion_one)
310 NULLIFY(solver_diffusion_two)
311 NULLIFY(solver_equations_diffusion_one)
312 NULLIFY(solver_equations_diffusion_two)
313 IF(
ASSOCIATED(problem))
THEN 314 IF(.NOT.
ALLOCATED(problem%specification))
THEN 315 CALL flagerror(
"Problem specification is not allocated.",err,error,*999)
316 ELSE IF(
SIZE(problem%specification,1)<3)
THEN 317 CALL flagerror(
"Problem specification must have three entries for a diffusion-diffusion problem.", &
320 SELECT CASE(problem%SPECIFICATION(3))
326 SELECT CASE(problem_setup%SETUP_TYPE)
328 SELECT CASE(problem_setup%ACTION_TYPE)
334 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
336 &
" is invalid for a diffusion-diffusion equation." 337 CALL flagerror(local_error,err,error,*999)
340 SELECT CASE(problem_setup%ACTION_TYPE)
347 control_loop_root=>problem%CONTROL_LOOP
351 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
353 &
" is invalid for a coupled diffusion-diffusion equation." 354 CALL flagerror(local_error,err,error,*999)
358 control_loop_root=>problem%CONTROL_LOOP
360 SELECT CASE(problem_setup%ACTION_TYPE)
390 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
392 &
" is invalid for a couple diffusion-diffusion equation." 393 CALL flagerror(local_error,err,error,*999)
396 SELECT CASE(problem_setup%ACTION_TYPE)
399 control_loop_root=>problem%CONTROL_LOOP
422 control_loop_root=>problem%CONTROL_LOOP
438 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
440 &
" is invalid for a coupled diffusion-diffusion equation." 441 CALL flagerror(local_error,err,error,*999)
444 local_error=
"The setup type of "//
trim(
number_to_vstring(problem_setup%SETUP_TYPE,
"*",err,error))// &
445 &
" is invalid for a coupled diffusion-diffusion equation." 446 CALL flagerror(local_error,err,error,*999)
453 local_error=
"The problem subtype of "//
trim(
number_to_vstring(problem%SPECIFICATION(3),
"*",err,error))// &
454 &
" does not equal a coupled source diffusion-diffusion equation subtype." 455 CALL flagerror(local_error,err,error,*999)
459 CALL flagerror(
"Problem is not associated.",err,error,*999)
462 exits(
"DIFFUSION_DIFFUSION_PROBLEM_SETUP")
464 999 errorsexits(
"DIFFUSION_DIFFUSION_PROBLEM_SETUP",err,error)
478 INTEGER(INTG),
INTENT(OUT) :: ERR
485 enters(
"DIFFUSION_DIFFUSION_PRE_SOLVE",err,error,*999)
487 IF(
ASSOCIATED(control_loop))
THEN 488 IF(
ASSOCIATED(solver))
THEN 489 IF(
ASSOCIATED(control_loop%PROBLEM))
THEN 490 IF(.NOT.
ALLOCATED(control_loop%problem%specification))
THEN 491 CALL flagerror(
"Problem specification is not allocated.",err,error,*999)
492 ELSE IF(
SIZE(control_loop%problem%specification,1)<3)
THEN 493 CALL flagerror(
"Problem specification must have three entries for a diffusion-diffusion problem.", &
496 SELECT CASE(control_loop%PROBLEM%SPECIFICATION(3))
499 IF(solver%GLOBAL_NUMBER==1)
THEN 504 ELSE IF(solver%GLOBAL_NUMBER==2)
THEN 509 local_error=
"Problem subtype "//
trim(
number_to_vstring(control_loop%PROBLEM%SPECIFICATION(3),
"*",err,error))// &
510 &
" is not valid for a diffusion type of a multi physics problem class." 511 CALL flagerror(local_error,err,error,*999)
514 CALL flagerror(
"Problem is not associated.",err,error,*999)
517 CALL flagerror(
"Solver is not associated.",err,error,*999)
520 CALL flagerror(
"Control loop is not associated.",err,error,*999)
523 exits(
"DIFFUSION_DIFFUSION_PRE_SOLVE")
525 999 errorsexits(
"DIFFUSION_DIFFUSION_PRE_SOLVE",err,error)
539 INTEGER(INTG),
INTENT(OUT) :: ERR
545 enters(
"DIFFUSION_DIFFUSION_POST_SOLVE",err,error,*999)
547 IF(
ASSOCIATED(control_loop))
THEN 548 IF(
ASSOCIATED(solver))
THEN 549 IF(
ASSOCIATED(control_loop%PROBLEM))
THEN 550 IF(.NOT.
ALLOCATED(control_loop%problem%specification))
THEN 551 CALL flagerror(
"Problem specification is not allocated.",err,error,*999)
552 ELSE IF(
SIZE(control_loop%problem%specification,1)<3)
THEN 553 CALL flagerror(
"Problem specification must have three entries for a diffusion-diffusion problem.", &
556 SELECT CASE(control_loop%PROBLEM%SPECIFICATION(3))
558 IF(solver%GLOBAL_NUMBER==1)
THEN 561 ELSE IF(solver%GLOBAL_NUMBER==2)
THEN 565 local_error=
"Problem subtype "//
trim(
number_to_vstring(control_loop%PROBLEM%SPECIFICATION(3),
"*",err,error))// &
566 &
" is not valid for a diffusion-diffusion type of a multi physics problem class." 567 CALL flagerror(local_error,err,error,*999)
570 CALL flagerror(
"Problem is not associated.",err,error,*999)
573 CALL flagerror(
"Solver is not associated.",err,error,*999)
576 CALL flagerror(
"Control loop is not associated.",err,error,*999)
579 exits(
"DIFFUSION_DIFFUSION_POST_SOLVE")
581 999 errorsexits(
"DIFFUSION_DIFFUSION_POST_SOLVE",err,error)
595 INTEGER(INTG),
INTENT(OUT) :: ERR
601 enters(
"DIFFUSION_DIFFUSION_POST_SOLVE_OUTPUT_DATA",err,error,*999)
603 IF(
ASSOCIATED(control_loop))
THEN 604 IF(
ASSOCIATED(solver))
THEN 605 IF(
ASSOCIATED(control_loop%PROBLEM))
THEN 606 IF(.NOT.
ALLOCATED(control_loop%problem%specification))
THEN 607 CALL flagerror(
"Problem specification is not allocated.",err,error,*999)
608 ELSE IF(
SIZE(control_loop%problem%specification,1)<3)
THEN 609 CALL flagerror(
"Problem specification must have three entries for a diffusion-diffusion problem.", &
612 SELECT CASE(control_loop%PROBLEM%SPECIFICATION(3))
616 local_error=
"Problem subtype "//
trim(
number_to_vstring(control_loop%PROBLEM%SPECIFICATION(3),
"*",err,error))// &
617 &
" is not valid for a diffusion type of a multi physics problem class." 618 CALL flagerror(local_error,err,error,*999)
621 CALL flagerror(
"Problem is not associated.",err,error,*999)
624 CALL flagerror(
"Solver is not associated.",err,error,*999)
627 CALL flagerror(
"Control loop is not associated.",err,error,*999)
630 exits(
"DIFFUSION_DIFFUSION_POST_SOLVE_OUTPUT_DATA")
632 999 errorsexits(
"DIFFUSION_DIFFUSION_POST_SOLVE_OUTPUT_DATA",err,error)
integer(intg), parameter equations_set_fem_solution_method
Finite Element Method solution method.
This module contains all basis function routines.
subroutine, public enters(NAME, ERR, ERROR,)
Records the entry into the named procedure and initialises the error code.
subroutine, public solvers_create_finish(SOLVERS, ERR, ERROR,)
Finish the creation of solvers.
integer(intg), parameter problem_diffusion_diffusion_type
This module contains all coordinate transformation and support routines.
integer(intg), parameter equations_set_gfem_solution_method
Grid-based Finite Element Method solution method.
integer(intg), parameter problem_control_time_loop_type
Time control loop.
integer(intg), parameter equations_set_coupled_source_diffusion_diffusion_subtype
integer(intg), parameter problem_setup_control_type
Solver setup for a problem.
This module handles all problem wide constants.
integer(intg), parameter solver_equations_first_order_dynamic
Solver equations are first order dynamic.
integer(intg), parameter, public control_loop_node
The identifier for a each "leaf" node in a control loop.
subroutine, public solver_dynamic_order_set(SOLVER, ORDER, ERR, ERROR,)
Sets/changes the order for a dynamic solver.
integer(intg), parameter problem_coupled_source_diffusion_diffusion_subtype
Converts a number to its equivalent varying string representation.
subroutine, public diffusion_diffusion_pre_solve(CONTROL_LOOP, SOLVER, ERR, ERROR,)
Sets up the diffusion-diffusion problem pre-solve.
Contains information on the type of solver to be used.
subroutine, public solvers_number_set(SOLVERS, NUMBER_OF_SOLVERS, ERR, ERROR,)
Sets/changes the number of solvers.
integer(intg), parameter, public solver_dynamic_crank_nicolson_scheme
Crank-Nicolson dynamic solver.
subroutine, public solver_dynamic_degree_set(SOLVER, DEGREE, ERR, ERROR,)
Sets/changes the degree of the polynomial used to interpolate time for a dynamic solver.
This module handles all equations matrix and rhs routines.
integer(intg), parameter, public solver_dynamic_first_order
Dynamic solver has first order terms.
subroutine, public solver_type_set(SOLVER, SOLVE_TYPE, ERR, ERROR,)
Sets/changes the type for a solver.
Contains information on an equations set.
This module handles all equations routines.
This module contains all string manipulation and transformation routines.
subroutine, public solvers_create_start(CONTROL_LOOP, SOLVERS, ERR, ERROR,)
Start the creation of a solvers for the control loop.
Contains information on the solvers to be used in a control loop.
subroutine, public diffusiondiffusion_equationssetspecificationset(equationsSet, specification, err, error,)
Sets the equation specification for a coupled diffusion-diffusion equation type of a multi physics eq...
This module contains routines for timing the program.
subroutine, public solver_equations_sparsity_type_set(SOLVER_EQUATIONS, SPARSITY_TYPE, ERR, ERROR,)
Sets/changes the sparsity type for solver equations.
This module contains all mathematics support routines.
subroutine, public solvers_solver_get(SOLVERS, SOLVER_INDEX, SOLVER, ERR, ERROR,)
Returns a pointer to the specified solver in the list of solvers.
integer(intg), parameter solver_equations_linear
Solver equations are linear.
Contains information on a control loop.
This module provides an iso_varying_string module, conformant to the API specified in ISO/IEC 1539-2:...
subroutine, public solver_equations_create_finish(SOLVER_EQUATIONS, ERR, ERROR,)
Finishes the process of creating solver equations.
integer(intg), parameter, public solver_sparse_matrices
Use sparse solver matrices.
subroutine, public solver_equations_create_start(SOLVER, SOLVER_EQUATIONS, ERR, ERROR,)
Starts the process of creating solver equations.
This module handles all routines pertaining to diffusion coupled to diffusion.
integer(intg), parameter, public solver_dynamic_type
A dynamic solver.
integer(intg), parameter problem_setup_solvers_type
Solver setup for a problem.
This module contains all program wide constants.
subroutine, public solver_library_type_set(SOLVER, SOLVER_LIBRARY_TYPE, ERR, ERROR,)
Sets/changes the type of library type to use for the solver.
subroutine, public diffusiondiffusion_equationssetsolutionmethodset(EQUATIONS_SET, SOLUTION_METHOD, ERR, ERROR,)
Sets/changes the solution method for a diffusion-diffusion equation type of a multi physics equations...
integer(intg), parameter problem_setup_initial_type
Initial setup for a problem.
subroutine, public diffusion_diffusion_post_solve(CONTROL_LOOP, SOLVER, ERR, ERROR,)
Sets up the diffusion-diffusion problem post solve.
subroutine, public solver_equations_linearity_type_set(SOLVER_EQUATIONS, LINEARITY_TYPE, ERR, ERROR,)
Sets/changes the linearity type for solver equations.
subroutine, public exits(NAME)
Records the exit out of the named procedure.
recursive subroutine, public control_loop_solvers_get(CONTROL_LOOP, SOLVERS, ERR, ERROR,)
Returns a pointer to the solvers for a control loop.
This module contains all type definitions in order to avoid cyclic module references.
This module contains all the low-level base routines e.g., all debug, control, and low-level communic...
subroutine, public diffusion_diffusion_equations_set_setup(EQUATIONS_SET, EQUATIONS_SET_SETUP, ERR, ERROR,)
Sets up the diffusion-diffusion coupled equation.
Returns the specified control loop as indexed by the control loop identifier from the control loop ro...
subroutine, public control_loop_type_set(CONTROL_LOOP, LOOP_TYPE, ERR, ERROR,)
Sets/changes the control loop type.
integer(intg), parameter problem_multi_physics_class
subroutine, public diffusion_presolvegetsourcevalue(CONTROL_LOOP, SOLVER, ERR, ERROR,)
subroutine, public diffusion_diffusion_problem_setup(PROBLEM, PROBLEM_SETUP, ERR, ERROR,)
Sets up the coupled diffusion-diffusion equations problem.
subroutine, public diffusiondiffusion_finiteelementcalculate(EQUATIONS_SET, ELEMENT_NUMBER, ERR, ERROR,)
Calculates the element stiffness matrices and RHS for a coupled diffusion-diffusion equation finite e...
subroutine, public diffusion_presolvestorecurrentsolution(CONTROL_LOOP, SOLVER, ERR, ERROR,)
This module handles all domain mappings routines.
integer(intg), parameter problem_setup_finish_action
Finish setup action.
This module handles all equations mapping routines.
Contains information about the solver equations for a solver.
integer(intg), parameter equations_set_gfv_solution_method
Grid-based Finite Volume solution method.
Contains information for a problem.
This module handles all distributed matrix vector routines.
subroutine, public diffusiondiffusion_problemspecificationset(problem, problemSpecification, err, error,)
Sets the problem specification for a coupled diffusion-diffusion equation type.
This module handles all boundary conditions routines.
This module handles all solver routines.
This module contains all routines dealing with (non-distributed) matrix and vectors types...
subroutine, public control_loop_create_start(PROBLEM, CONTROL_LOOP, ERR, ERROR,)
Start the process of creating a control loop for a problem.
integer(intg), parameter problem_setup_solver_equations_type
Solver equations setup for a problem.
subroutine, public solver_dynamic_scheme_set(SOLVER, SCHEME, ERR, ERROR,)
Sets/changes the scheme for a dynamic solver.
integer(intg), parameter equations_set_fd_solution_method
Finite Difference solution method.
Contains information on the setup information for an equations set.
integer(intg), parameter problem_setup_start_action
Start setup action.
subroutine, public solver_equations_time_dependence_type_set(SOLVER_EQUATIONS, TIME_DEPENDENCE_TYPE, ERR, ERROR,)
Sets/changes the time dependence type for solver equations.
This module handles all control loop routines.
integer(intg), parameter, public solver_cmiss_library
CMISS (internal) solver library.
subroutine, public errors(NAME, ERR, ERROR)
Records the exiting error of the subroutine.
This module defines all constants shared across equations set routines.
integer(intg), parameter equations_set_bem_solution_method
Boundary Element Method solution method.
subroutine diffusion_diffusion_post_solve_output_data(CONTROL_LOOP, SOLVER, ERR, ERROR,)
Sets up the diffuion-diffusion problem post solve output data.
subroutine, public solver_solver_equations_get(SOLVER, SOLVER_EQUATIONS, ERR, ERROR,)
Returns a pointer to the solver equations for a solver.
integer(intg), parameter equations_set_fv_solution_method
Finite Volume solution method.
integer(intg), parameter, public solver_dynamic_first_degree
Dynamic solver uses a first degree polynomial for time interpolation.
recursive subroutine, public control_loop_create_finish(CONTROL_LOOP, ERR, ERROR,)
Finish the process of creating a control loop.
Flags an error condition.
This module handles all diffusion equation routines.
This module contains all kind definitions.
Temporary IO routines for fluid mechanics.