86 PUBLIC helmholtz_boundaryconditionsanalyticcalculate
88 PUBLIC helmholtz_equationssetsolutionmethodset
90 PUBLIC helmholtz_equation_equations_set_setup
92 PUBLIC helmholtz_equationssetspecificationset
94 PUBLIC helmholtz_equation_finite_element_calculate
96 PUBLIC helmholtz_equation_problem_setup
98 PUBLIC helmholtz_problemspecificationset
108 SUBROUTINE helmholtz_boundaryconditionsanalyticcalculate(EQUATIONS_SET,BOUNDARY_CONDITIONS,ERR,ERROR,*)
113 INTEGER(INTG),
INTENT(OUT) :: ERR
116 INTEGER(INTG) :: component_idx,node_idx,NUMBER_OF_DIMENSIONS,variable_idx,variable_type,local_ny,deriv_idx,dim_idx
117 REAL(DP),
POINTER :: GEOMETRIC_PARAMETERS(:), MATERIALS_PARAMETERS(:)
120 TYPE(
field_type),
POINTER :: DEPENDENT_FIELD,GEOMETRIC_FIELD,MATERIALS_FIELD
122 REAL(DP) ::
VALUE,X(3),k,mu
125 enters(
"Helmholtz_BoundaryConditionsAnalyticCalculate",err,error,*999)
127 IF(
ASSOCIATED(equations_set))
THEN 128 IF(
ASSOCIATED(equations_set%ANALYTIC))
THEN 129 dependent_field=>equations_set%DEPENDENT%DEPENDENT_FIELD
130 IF(
ASSOCIATED(dependent_field))
THEN 131 geometric_field=>equations_set%GEOMETRY%GEOMETRIC_FIELD
132 IF(
ASSOCIATED(geometric_field))
THEN 133 materials_field=>equations_set%MATERIALS%MATERIALS_FIELD
134 IF(
ASSOCIATED(materials_field))
THEN 135 CALL field_number_of_components_get(geometric_field,field_u_variable_type,number_of_dimensions,err,error,*999)
136 NULLIFY(geometric_variable)
137 NULLIFY(geometric_parameters)
138 CALL field_variable_get(geometric_field,field_u_variable_type,geometric_variable,err,error,*999)
139 CALL field_parameter_set_data_get(geometric_field,field_u_variable_type,field_values_set_type,geometric_parameters, &
141 NULLIFY(materials_variable)
142 NULLIFY(materials_parameters)
143 CALL field_variable_get(materials_field,field_u_variable_type,materials_variable,err,error,*999)
144 CALL field_parameter_set_data_get(materials_field,field_u_variable_type,field_values_set_type,materials_parameters, &
146 IF(
ASSOCIATED(boundary_conditions))
THEN 147 DO variable_idx=1,dependent_field%NUMBER_OF_VARIABLES
148 variable_type=dependent_field%VARIABLES(variable_idx)%VARIABLE_TYPE
149 field_variable=>dependent_field%VARIABLE_TYPE_MAP(variable_type)%PTR
150 IF(
ASSOCIATED(field_variable))
THEN 151 CALL field_parameter_set_create(dependent_field,variable_type,field_analytic_values_set_type,err,error,*999)
152 DO component_idx=1,field_variable%NUMBER_OF_COMPONENTS
153 IF(field_variable%COMPONENTS(component_idx)%INTERPOLATION_TYPE==field_node_based_interpolation)
THEN 154 IF(materials_variable%COMPONENTS(1)%INTERPOLATION_TYPE==field_constant_interpolation)
THEN 155 local_ny=materials_variable%COMPONENTS(1)%PARAM_TO_DOF_MAP%CONSTANT_PARAM2DOF_MAP
156 k=materials_parameters(local_ny)
158 domain=>field_variable%COMPONENTS(component_idx)%DOMAIN
159 IF(
ASSOCIATED(domain))
THEN 160 IF(
ASSOCIATED(domain%TOPOLOGY))
THEN 161 domain_nodes=>domain%TOPOLOGY%NODES
162 IF(
ASSOCIATED(domain_nodes))
THEN 164 DO node_idx=1,domain_nodes%NUMBER_OF_NODES
166 DO dim_idx=1,number_of_dimensions
167 local_ny=geometric_variable%COMPONENTS(dim_idx)%PARAM_TO_DOF_MAP%NODE_PARAM2DOF_MAP% &
168 & nodes(node_idx)%DERIVATIVES(1)%VERSIONS(1)
169 x(dim_idx)=geometric_parameters(local_ny)
172 DO deriv_idx=1,domain_nodes%NODES(node_idx)%NUMBER_OF_DERIVATIVES
173 SELECT CASE(equations_set%ANALYTIC%ANALYTIC_FUNCTION_TYPE)
176 SELECT CASE(variable_type)
177 CASE(field_u_variable_type)
178 SELECT CASE(domain_nodes%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX)
180 VALUE=cos(mu*x(1))*sin(mu*x(2))
182 VALUE=-mu*sin(mu*x(1))*sin(mu*x(2))
184 VALUE=mu*cos(mu*x(1))*cos(mu*x(2))
186 VALUE=-mu*mu*sin(mu*x(1))*cos(mu*x(2))
189 & domain_nodes%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,
"*", &
190 & err,error))//
" is invalid." 191 CALL flagerror(local_error,err,error,*999)
193 CASE(field_deludeln_variable_type)
194 SELECT CASE(domain_nodes%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX)
198 CALL flagerror(
"Not implemented.",err,error,*999)
200 CALL flagerror(
"Not implemented.",err,error,*999)
202 CALL flagerror(
"Not implemented.",err,error,*999)
205 & domain_nodes%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,
"*", &
206 & err,error))//
" is invalid." 207 CALL flagerror(local_error,err,error,*999)
212 CALL flagerror(local_error,err,error,*999)
215 local_error=
"The analytic function type of "// &
218 CALL flagerror(local_error,err,error,*999)
220 local_ny=field_variable%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% &
221 & node_param2dof_map%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1)
222 CALL field_parameter_set_update_local_dof(dependent_field,variable_type, &
223 & field_analytic_values_set_type,local_ny,
VALUE,err,error,*999)
224 IF(variable_type==field_u_variable_type)
THEN 225 IF(domain_nodes%NODES(node_idx)%BOUNDARY_NODE)
THEN 234 CALL flagerror(
"Domain topology nodes is not associated.",err,error,*999)
237 CALL flagerror(
"Domain topology is not associated.",err,error,*999)
240 CALL flagerror(
"Domain is not associated.",err,error,*999)
243 CALL flagerror(
"Only constant interpolation of the material field is implemented.",err,error,*999)
246 CALL flagerror(
"Only node based interpolation is implemented.",err,error,*999)
249 CALL field_parameter_set_update_start(dependent_field,variable_type,field_analytic_values_set_type, &
251 CALL field_parameter_set_update_finish(dependent_field,variable_type,field_analytic_values_set_type, &
254 CALL flagerror(
"Field variable is not associated.",err,error,*999)
258 CALL field_parameter_set_data_restore(geometric_field,field_u_variable_type,field_values_set_type, &
259 & geometric_parameters,err,error,*999)
261 CALL flagerror(
"Boundary conditions is not associated.",err,error,*999)
264 CALL flagerror(
"Equations set materials field is not associated.",err,error,*999)
267 CALL flagerror(
"Equations set geometric field is not associated.",err,error,*999)
270 CALL flagerror(
"Equations set dependent field is not associated.",err,error,*999)
273 CALL flagerror(
"Equations set analytic is not associated.",err,error,*999)
276 CALL flagerror(
"Equations set is not associated.",err,error,*999)
279 exits(
"Helmholtz_BoundaryConditionsAnalyticCalculate")
281 999
errors(
"Helmholtz_BoundaryConditionsAnalyticCalculate",err,error)
282 exits(
"Helmholtz_BoundaryConditionsAnalyticCalculate")
285 END SUBROUTINE helmholtz_boundaryconditionsanalyticcalculate
292 SUBROUTINE helmholtz_equation_finite_element_calculate(EQUATIONS_SET,ELEMENT_NUMBER,ERR,ERROR,*)
296 INTEGER(INTG),
INTENT(IN) :: ELEMENT_NUMBER
297 INTEGER(INTG),
INTENT(OUT) :: ERR
300 INTEGER(INTG) FIELD_VAR_TYPE,ng,mh,mhs,mi,ms,nh,nhs,ni,ns
301 REAL(DP) :: RWG,SUM,PGMSI(3),PGNSI(3),PGM,PGN,k
302 TYPE(
basis_type),
POINTER :: DEPENDENT_BASIS,GEOMETRIC_BASIS
310 TYPE(
field_type),
POINTER :: DEPENDENT_FIELD,GEOMETRIC_FIELD,MATERIALS_FIELD
316 CHARACTER(26) :: CVAR
317 INTEGER :: GAUSS_POINT_LOOP_PHASE(2) = (/ 0, 0 /)
318 SAVE gauss_point_loop_phase
321 enters(
"HELMHOLTZ_EQUATION_FINITE_ELEMENT_CALCULATE",err,error,*999)
323 IF(
ASSOCIATED(equations_set))
THEN 324 IF(.NOT.
ALLOCATED(equations_set%SPECIFICATION))
THEN 325 CALL flagerror(
"Equations set specification is not allocated.",err,error,*999)
326 ELSE IF(
SIZE(equations_set%SPECIFICATION,1)/=3)
THEN 327 CALL flagerror(
"Equations set specification must have three entries for a Helmholtz type equations set.", &
330 equations=>equations_set%EQUATIONS
331 IF(
ASSOCIATED(equations))
THEN 332 SELECT CASE(equations_set%SPECIFICATION(3))
336 dependent_field=>equations%INTERPOLATION%DEPENDENT_FIELD
337 geometric_field=>equations%INTERPOLATION%GEOMETRIC_FIELD
338 materials_field=>equations%INTERPOLATION%MATERIALS_FIELD
339 equations_matrices=>equations%EQUATIONS_MATRICES
340 linear_matrices=>equations_matrices%LINEAR_MATRICES
341 equations_matrix=>linear_matrices%MATRICES(1)%PTR
342 rhs_vector=>equations_matrices%RHS_VECTOR
343 equations_mapping=>equations%EQUATIONS_MAPPING
344 linear_mapping=>equations_mapping%LINEAR_MAPPING
345 field_variable=>linear_mapping%EQUATIONS_MATRIX_TO_VAR_MAPS(1)%VARIABLE
346 field_var_type=field_variable%VARIABLE_TYPE
347 dependent_basis=>dependent_field%DECOMPOSITION%DOMAIN(dependent_field%DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR% &
348 & topology%ELEMENTS%ELEMENTS(element_number)%BASIS
349 geometric_basis=>geometric_field%DECOMPOSITION%DOMAIN(geometric_field%DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR% &
350 & topology%ELEMENTS%ELEMENTS(element_number)%BASIS
352 CALL field_interpolation_parameters_element_get(field_values_set_type,element_number,equations%INTERPOLATION% &
353 & geometric_interp_parameters(field_u_variable_type)%PTR,err,error,*999)
354 CALL field_interpolation_parameters_element_get(field_values_set_type,element_number,equations%INTERPOLATION% &
355 & materials_interp_parameters(field_u_variable_type)%PTR,err,error,*999)
357 DO ng=1,quadrature_scheme%NUMBER_OF_GAUSS
359 WRITE (cvar,
'(a17,i2)')
'Gauss Point Loop ',ng
360 CALL tau_phase_create_dynamic(gauss_point_loop_phase,cvar)
361 CALL tau_phase_start(gauss_point_loop_phase)
364 & geometric_interp_point(field_u_variable_type)%PTR,err,error,*999)
365 CALL field_interpolated_point_metrics_calculate(geometric_basis%NUMBER_OF_XI,equations%INTERPOLATION% &
366 & geometric_interp_point_metrics(field_u_variable_type)%PTR,err,error,*999)
369 & materials_interp_point(field_u_variable_type)%PTR,err,error,*999)
370 k = equations%INTERPOLATION%MATERIALS_INTERP_POINT(field_u_variable_type)%PTR%VALUES(1,
no_part_deriv)
374 rwg=equations%INTERPOLATION%GEOMETRIC_INTERP_POINT_METRICS(field_u_variable_type)%PTR%JACOBIAN* &
375 & quadrature_scheme%GAUSS_WEIGHTS(ng)
378 DO mh=1,field_variable%NUMBER_OF_COMPONENTS
381 DO ms=1,dependent_basis%NUMBER_OF_ELEMENT_PARAMETERS
384 IF(equations_matrix%UPDATE_MATRIX)
THEN 386 DO nh=1,field_variable%NUMBER_OF_COMPONENTS
387 DO ns=1,dependent_basis%NUMBER_OF_ELEMENT_PARAMETERS
391 DO ni=1,dependent_basis%NUMBER_OF_XI
397 DO mi=1,dependent_basis%NUMBER_OF_XI
398 DO ni=1,dependent_basis%NUMBER_OF_XI
399 sum=sum+pgmsi(mi)*pgnsi(ni)*equations%INTERPOLATION% &
400 & geometric_interp_point_metrics(field_u_variable_type)%PTR%GU(mi,ni)
403 equations_matrix%ELEMENT_MATRIX%MATRIX(mhs,nhs)=equations_matrix%ELEMENT_MATRIX%MATRIX(mhs,nhs)+sum*rwg
407 IF(rhs_vector%UPDATE_VECTOR) rhs_vector%ELEMENT_VECTOR%VECTOR(mhs)=0.0_dp
411 CALL tau_phase_stop(gauss_point_loop_phase)
416 IF(dependent_field%SCALINGS%SCALING_TYPE/=field_no_scaling)
THEN 417 CALL field_interpolationparametersscalefactorselementget(element_number,equations%INTERPOLATION% &
418 & dependent_interp_parameters(field_var_type)%PTR,err,error,*999)
420 DO mh=1,field_variable%NUMBER_OF_COMPONENTS
422 DO ms=1,dependent_basis%NUMBER_OF_ELEMENT_PARAMETERS
425 IF(equations_matrix%UPDATE_MATRIX)
THEN 427 DO nh=1,field_variable%NUMBER_OF_COMPONENTS
428 DO ns=1,dependent_basis%NUMBER_OF_ELEMENT_PARAMETERS
430 equations_matrix%ELEMENT_MATRIX%MATRIX(mhs,nhs)=equations_matrix%ELEMENT_MATRIX%MATRIX(mhs,nhs)* &
431 & equations%INTERPOLATION%DEPENDENT_INTERP_PARAMETERS(field_var_type)%PTR%SCALE_FACTORS(ms,mh)* &
432 & equations%INTERPOLATION%DEPENDENT_INTERP_PARAMETERS(field_var_type)%PTR%SCALE_FACTORS(ns,nh)
436 IF(rhs_vector%UPDATE_VECTOR) rhs_vector%ELEMENT_VECTOR%VECTOR(mhs)=rhs_vector%ELEMENT_VECTOR%VECTOR(mhs)* &
437 & equations%INTERPOLATION%DEPENDENT_INTERP_PARAMETERS(field_var_type)%PTR%SCALE_FACTORS(ms,mh)
442 CALL flagerror(
"Not implemented.",err,error,*999)
444 local_error=
"Equations set subtype "//
trim(
number_to_vstring(equations_set%SPECIFICATION(3),
"*",err,error))// &
445 &
" is not valid for a Helmholtz equation type of a classical field equations set class." 446 CALL flagerror(local_error,err,error,*999)
450 CALL flagerror(
"Equations set equations is not associated.",err,error,*999)
453 CALL flagerror(
"Equations set is not associated.",err,error,*999)
456 exits(
"HELMHOLTZ_EQUATION_FINITE_ELEMENT_CALCULATE")
458 999 errorsexits(
"HELMHOLTZ_EQUATION_FINITE_ELEMENT_CALCULATE",err,error)
460 END SUBROUTINE helmholtz_equation_finite_element_calculate
467 SUBROUTINE helmholtz_equation_equations_set_setup(EQUATIONS_SET,EQUATIONS_SET_SETUP,ERR,ERROR,*)
472 INTEGER(INTG),
INTENT(OUT) :: ERR
477 enters(
"HELMHOLTZ_EQUATION_EQUATIONS_SET_SETUP",err,error,*999)
479 IF(
ASSOCIATED(equations_set))
THEN 480 IF(.NOT.
ALLOCATED(equations_set%SPECIFICATION))
THEN 481 CALL flagerror(
"Equations set specification is not allocated.",err,error,*999)
482 ELSE IF(
SIZE(equations_set%SPECIFICATION,1)/=3)
THEN 483 CALL flagerror(
"Equations set specification must have three entries for a Helmholtz type equations set.", &
486 SELECT CASE(equations_set%SPECIFICATION(3))
488 CALL helmholtz_equationssetstandardsetup(equations_set,equations_set_setup,err,error,*999)
490 CALL flagerror(
"Not implemented.",err,error,*999)
492 local_error=
"Equations set subtype "//
trim(
number_to_vstring(equations_set%SPECIFICATION(3),
"*",err,error))// &
493 &
" is not valid for a Helmholtz equation type of a classical field equation set class." 494 CALL flagerror(local_error,err,error,*999)
497 CALL flagerror(
"Equations set is not associated.",err,error,*999)
500 exits(
"HELMHOLTZ_EQUATION_EQUATIONS_SET_SETUP")
502 999 errorsexits(
"HELMHOLTZ_EQUATION_EQUATIONS_SET_SETUP",err,error)
504 END SUBROUTINE helmholtz_equation_equations_set_setup
511 SUBROUTINE helmholtz_equationssetsolutionmethodset(EQUATIONS_SET,SOLUTION_METHOD,ERR,ERROR,*)
515 INTEGER(INTG),
INTENT(IN) :: SOLUTION_METHOD
516 INTEGER(INTG),
INTENT(OUT) :: ERR
521 enters(
"Helmholtz_EquationsSetSolutionMethodSet",err,error,*999)
523 IF(
ASSOCIATED(equations_set))
THEN 524 IF(.NOT.
ALLOCATED(equations_set%SPECIFICATION))
THEN 525 CALL flagerror(
"Equations set specification is not allocated.",err,error,*999)
526 ELSE IF(
SIZE(equations_set%SPECIFICATION,1)/=3)
THEN 527 CALL flagerror(
"Equations set specification must have three entries for a Helmholtz type equations set.", &
530 SELECT CASE(equations_set%SPECIFICATION(3))
532 SELECT CASE(solution_method)
536 CALL flagerror(
"Not implemented.",err,error,*999)
538 CALL flagerror(
"Not implemented.",err,error,*999)
540 CALL flagerror(
"Not implemented.",err,error,*999)
542 CALL flagerror(
"Not implemented.",err,error,*999)
544 CALL flagerror(
"Not implemented.",err,error,*999)
546 local_error=
"The specified solution method of "//
trim(
number_to_vstring(solution_method,
"*",err,error))//
" is invalid." 547 CALL flagerror(local_error,err,error,*999)
550 SELECT CASE(solution_method)
554 CALL flagerror(
"Not implemented.",err,error,*999)
556 CALL flagerror(
"Not implemented.",err,error,*999)
558 CALL flagerror(
"Not implemented.",err,error,*999)
560 CALL flagerror(
"Not implemented.",err,error,*999)
562 CALL flagerror(
"Not implemented.",err,error,*999)
564 local_error=
"The specified solution method of "//
trim(
number_to_vstring(solution_method,
"*",err,error))//
" is invalid." 565 CALL flagerror(local_error,err,error,*999)
568 local_error=
"Equations set subtype of "//
trim(
number_to_vstring(equations_set%SPECIFICATION(3),
"*",err,error))// &
569 &
" is not valid for a Helmholtz equation type of an classical field equations set class." 570 CALL flagerror(local_error,err,error,*999)
573 CALL flagerror(
"Equations set is not associated.",err,error,*999)
576 exits(
"Helmholtz_EquationsSetSolutionMethodSet")
578 999
errors(
"Helmholtz_EquationsSetSolutionMethodSet",err,error)
579 exits(
"Helmholtz_EquationsSetSolutionMethodSet")
582 END SUBROUTINE helmholtz_equationssetsolutionmethodset
589 SUBROUTINE helmholtz_equationssetspecificationset(equationsSet,specification,err,error,*)
593 INTEGER(INTG),
INTENT(IN) :: specification(:)
594 INTEGER(INTG),
INTENT(OUT) :: err
598 INTEGER(INTG) :: subtype
600 enters(
"Helmholtz_EquationsSetSpecificationSet",err,error,*999)
602 IF(
ASSOCIATED(equationsset))
THEN 603 IF(
SIZE(specification,1)/=3)
THEN 604 CALL flagerror(
"Equations set specification must have three entries for a Helmholtz type equations set.", &
607 subtype=specification(3)
612 CALL flagerror(
"Not implemented.",err,error,*999)
614 localerror=
"The third equations set specification of "//
trim(
numbertovstring(subtype,
"*",err,error))// &
615 &
" is not valid for a Helmholtz type of a classical field equations set." 616 CALL flagerror(localerror,err,error,*999)
619 IF(
ALLOCATED(equationsset%specification))
THEN 620 CALL flagerror(
"Equations set specification is already allocated.",err,error,*999)
622 ALLOCATE(equationsset%specification(3),stat=err)
623 IF(err/=0)
CALL flagerror(
"Could not allocate equations set specification.",err,error,*999)
627 CALL flagerror(
"Equations set is not associated.",err,error,*999)
630 exits(
"Helmholtz_EquationsSetSpecificationSet")
632 999
errors(
"Helmholtz_EquationsSetSpecificationSet",err,error)
633 exits(
"Helmholtz_EquationsSetSpecificationSet")
636 END SUBROUTINE helmholtz_equationssetspecificationset
643 SUBROUTINE helmholtz_equationssetstandardsetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,ERR,ERROR,*)
648 INTEGER(INTG),
INTENT(OUT) :: ERR
651 INTEGER(INTG) :: GEOMETRIC_MESH_COMPONENT,GEOMETRIC_SCALING_TYPE,NUMBER_OF_DIMENSIONS
653 TYPE(
field_type),
POINTER :: ANALYTIC_FIELD,DEPENDENT_FIELD,GEOMETRIC_FIELD
658 INTEGER(INTG) :: MATERIAL_FIELD_NUMBER_OF_VARIABLES, MATERIAL_FIELD_NUMBER_OF_COMPONENTS
659 INTEGER(INTG) :: i,GEOMETRIC_COMPONENT_NUMBER
662 enters(
"HELMHOLTZ_EQUATION_EQUATION_SET_STANDARD_SETUP",err,error,*999)
665 NULLIFY(equations_mapping)
666 NULLIFY(equations_matrices)
667 NULLIFY(geometric_decomposition)
669 IF(
ASSOCIATED(equations_set))
THEN 670 IF(.NOT.
ALLOCATED(equations_set%SPECIFICATION))
THEN 671 CALL flagerror(
"Equations set specification is not allocated.",err,error,*999)
672 ELSE IF(
SIZE(equations_set%SPECIFICATION,1)/=3)
THEN 673 CALL flagerror(
"Equations set specification must have three entries for a Helmholtz type equations set.", &
677 SELECT CASE(equations_set_setup%SETUP_TYPE)
679 SELECT CASE(equations_set_setup%ACTION_TYPE)
686 local_error=
"The action type of "//
trim(
number_to_vstring(equations_set_setup%ACTION_TYPE,
"*",err,error))// &
688 &
" is invalid for a standard Helmholtz equation." 689 CALL flagerror(local_error,err,error,*999)
694 SELECT CASE(equations_set_setup%ACTION_TYPE)
696 IF(equations_set%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED)
THEN 698 CALL field_create_start(equations_set_setup%FIELD_USER_NUMBER,equations_set%REGION,equations_set%DEPENDENT% &
699 & dependent_field,err,error,*999)
700 CALL field_label_set(equations_set%DEPENDENT%DEPENDENT_FIELD,
"Dependent Field",err,error,*999)
701 CALL field_type_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_general_type,err,error,*999)
702 CALL field_dependent_type_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_dependent_type,err,error,*999)
703 CALL field_mesh_decomposition_get(equations_set%GEOMETRY%GEOMETRIC_FIELD,geometric_decomposition,err,error,*999)
704 CALL field_mesh_decomposition_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,geometric_decomposition, &
706 CALL field_geometric_field_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,equations_set%GEOMETRY% &
707 & geometric_field,err,error,*999)
708 CALL field_number_of_variables_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,2,err,error,*999)
709 CALL field_variable_types_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,(/field_u_variable_type, &
710 & field_deludeln_variable_type/),err,error,*999)
711 CALL field_variable_label_set(equations_set%DEPENDENT%DEPENDENT_FIELD,field_u_variable_type,
"Phi",err,error,*999)
712 CALL field_variable_label_set(equations_set%DEPENDENT%DEPENDENT_FIELD,field_deludeln_variable_type,
"del Phi/del n", &
714 CALL field_dimension_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_u_variable_type, &
715 & field_scalar_dimension_type,err,error,*999)
716 CALL field_dimension_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_deludeln_variable_type, &
717 & field_scalar_dimension_type,err,error,*999)
718 CALL field_data_type_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_u_variable_type, &
719 & field_dp_type,err,error,*999)
720 CALL field_data_type_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_deludeln_variable_type, &
721 & field_dp_type,err,error,*999)
722 CALL field_number_of_components_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_u_variable_type,1, &
724 CALL field_number_of_components_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD,field_deludeln_variable_type,1, &
726 CALL field_component_label_set(equations_set%DEPENDENT%DEPENDENT_FIELD,field_u_variable_type,1,
"Phi",err,error,*999)
727 CALL field_component_label_set(equations_set%DEPENDENT%DEPENDENT_FIELD,field_deludeln_variable_type,1, &
728 &
"del Phi/del n",err,error,*999)
730 CALL field_component_mesh_component_get(equations_set%GEOMETRY%GEOMETRIC_FIELD,field_u_variable_type,1, &
731 & geometric_mesh_component,err,error,*999)
732 CALL field_component_mesh_component_set(equations_set%DEPENDENT%DEPENDENT_FIELD,field_u_variable_type,1, &
733 & geometric_mesh_component,err,error,*999)
734 CALL field_component_mesh_component_set(equations_set%DEPENDENT%DEPENDENT_FIELD,field_deludeln_variable_type,1, &
735 & geometric_mesh_component,err,error,*999)
736 SELECT CASE(equations_set%SOLUTION_METHOD)
738 CALL field_component_interpolation_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD, &
739 & field_u_variable_type,1,field_node_based_interpolation,err,error,*999)
740 CALL field_component_interpolation_set_and_lock(equations_set%DEPENDENT%DEPENDENT_FIELD, &
741 & field_deludeln_variable_type,1,field_node_based_interpolation,err,error,*999)
743 CALL field_scaling_type_get(equations_set%GEOMETRY%GEOMETRIC_FIELD,geometric_scaling_type,err,error,*999)
744 CALL field_scaling_type_set(equations_set%DEPENDENT%DEPENDENT_FIELD,geometric_scaling_type,err,error,*999)
746 CALL flagerror(
"Not implemented.",err,error,*999)
748 CALL flagerror(
"Not implemented.",err,error,*999)
750 CALL flagerror(
"Not implemented.",err,error,*999)
752 CALL flagerror(
"Not implemented.",err,error,*999)
754 CALL flagerror(
"Not implemented.",err,error,*999)
756 local_error=
"The solution method of "//
trim(
number_to_vstring(equations_set%SOLUTION_METHOD,
"*",err,error))// &
758 CALL flagerror(local_error,err,error,*999)
762 CALL field_type_check(equations_set_setup%FIELD,field_general_type,err,error,*999)
763 CALL field_dependent_type_check(equations_set_setup%FIELD,field_dependent_type,err,error,*999)
764 CALL field_number_of_variables_check(equations_set_setup%FIELD,2,err,error,*999)
765 CALL field_variable_types_check(equations_set_setup%FIELD,(/field_u_variable_type,field_deludeln_variable_type/), &
767 CALL field_dimension_check(equations_set_setup%FIELD,field_u_variable_type,field_scalar_dimension_type,err,error,*999)
768 CALL field_dimension_check(equations_set_setup%FIELD,field_deludeln_variable_type,field_scalar_dimension_type, &
770 CALL field_data_type_check(equations_set_setup%FIELD,field_u_variable_type,field_dp_type,err,error,*999)
771 CALL field_data_type_check(equations_set_setup%FIELD,field_deludeln_variable_type,field_dp_type,err,error,*999)
772 CALL field_number_of_components_check(equations_set_setup%FIELD,field_u_variable_type,1,err,error,*999)
773 CALL field_number_of_components_check(equations_set_setup%FIELD,field_deludeln_variable_type,1,err,error,*999)
774 SELECT CASE(equations_set%SOLUTION_METHOD)
776 CALL field_component_interpolation_check(equations_set_setup%FIELD,field_u_variable_type,1, &
777 & field_node_based_interpolation,err,error,*999)
778 CALL field_component_interpolation_check(equations_set_setup%FIELD,field_deludeln_variable_type,1, &
779 & field_node_based_interpolation,err,error,*999)
781 CALL flagerror(
"Not implemented.",err,error,*999)
783 CALL flagerror(
"Not implemented.",err,error,*999)
785 CALL flagerror(
"Not implemented.",err,error,*999)
787 CALL flagerror(
"Not implemented.",err,error,*999)
789 CALL flagerror(
"Not implemented.",err,error,*999)
791 local_error=
"The solution method of "//
trim(
number_to_vstring(equations_set%SOLUTION_METHOD,
"*",err,error))// &
793 CALL flagerror(local_error,err,error,*999)
797 IF(equations_set%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED)
THEN 798 CALL field_create_finish(equations_set%DEPENDENT%DEPENDENT_FIELD,err,error,*999)
801 local_error=
"The action type of "//
trim(
number_to_vstring(equations_set_setup%ACTION_TYPE,
"*",err,error))// &
803 &
" is invalid for a standard Helmholtz equation" 804 CALL flagerror(local_error,err,error,*999)
807 material_field_number_of_variables=1
808 material_field_number_of_components=1
809 SELECT CASE(equations_set_setup%ACTION_TYPE)
811 equations_materials=>equations_set%MATERIALS
812 IF(
ASSOCIATED(equations_materials))
THEN 813 IF(equations_materials%MATERIALS_FIELD_AUTO_CREATED)
THEN 815 CALL field_create_start(equations_set_setup%FIELD_USER_NUMBER,equations_set%REGION,equations_materials% &
816 & materials_field,err,error,*999)
817 CALL field_type_set_and_lock(equations_materials%MATERIALS_FIELD,field_material_type,err,error,*999)
818 CALL field_dependent_type_set_and_lock(equations_materials%MATERIALS_FIELD,field_independent_type,err,error,*999)
819 CALL field_mesh_decomposition_get(equations_set%GEOMETRY%GEOMETRIC_FIELD,geometric_decomposition,err,error,*999)
820 CALL field_mesh_decomposition_set_and_lock(equations_materials%MATERIALS_FIELD,geometric_decomposition, &
822 CALL field_geometric_field_set_and_lock(equations_materials%MATERIALS_FIELD,equations_set%GEOMETRY% &
823 & geometric_field,err,error,*999)
824 CALL field_number_of_variables_set(equations_materials%MATERIALS_FIELD, &
825 & material_field_number_of_variables,err,error,*999)
826 CALL field_variable_types_set_and_lock(equations_materials%MATERIALS_FIELD,(/field_u_variable_type/), &
828 CALL field_dimension_set_and_lock(equations_materials%MATERIALS_FIELD,field_u_variable_type, &
829 & field_vector_dimension_type,err,error,*999)
830 CALL field_data_type_set_and_lock(equations_materials%MATERIALS_FIELD,field_u_variable_type, &
831 & field_dp_type,err,error,*999)
832 CALL field_number_of_components_set_and_lock(equations_materials%MATERIALS_FIELD,field_u_variable_type, &
833 & material_field_number_of_components,err,error,*999)
834 CALL field_component_mesh_component_get(equations_set%GEOMETRY%GEOMETRIC_FIELD,field_u_variable_type, &
835 & 1,geometric_component_number,err,error,*999)
838 DO i=1,material_field_number_of_components
839 CALL field_component_mesh_component_set(equations_materials%MATERIALS_FIELD,field_u_variable_type, &
840 & i,geometric_component_number,err,error,*999)
841 CALL field_component_interpolation_set(equations_materials%MATERIALS_FIELD,field_u_variable_type, &
842 & i,field_constant_interpolation,err,error,*999)
846 CALL field_scaling_type_get(equations_set%GEOMETRY%GEOMETRIC_FIELD,geometric_scaling_type,err,error,*999)
847 CALL field_scaling_type_set(equations_materials%MATERIALS_FIELD,geometric_scaling_type,err,error,*999)
850 CALL field_type_check(equations_set_setup%FIELD,field_material_type,err,error,*999)
851 CALL field_dependent_type_check(equations_set_setup%FIELD,field_independent_type,err,error,*999)
852 CALL field_number_of_variables_check(equations_set_setup%FIELD,1,err,error,*999)
853 CALL field_variable_types_check(equations_set_setup%FIELD,(/field_u_variable_type/),err,error,*999)
854 CALL field_dimension_check(equations_set_setup%FIELD,field_u_variable_type,field_vector_dimension_type, &
856 CALL field_data_type_check(equations_set_setup%FIELD,field_u_variable_type,field_dp_type,err,error,*999)
857 CALL field_number_of_components_check(equations_set_setup%FIELD,field_u_variable_type,1,err,error,*999)
860 CALL flagerror(
"Equations set materials is not associated.",err,error,*999)
863 equations_materials=>equations_set%MATERIALS
864 IF(
ASSOCIATED(equations_materials) )
THEN 865 IF( equations_materials%MATERIALS_FIELD_AUTO_CREATED )
THEN 866 CALL field_create_finish(equations_materials%MATERIALS_FIELD,err,error,*999)
868 DO i=1,material_field_number_of_components
869 CALL field_component_values_initialise(equations_materials%MATERIALS_FIELD,field_u_variable_type, &
870 & field_values_set_type, i, 1.0_dp, err, error, *999)
874 CALL flagerror(
"Equations set materials is not associated.",err,error,*999)
877 local_error=
"The action type of "//
trim(
number_to_vstring(equations_set_setup%ACTION_TYPE,
"*",err,error))// &
879 &
" is invalid for a standard Helmholtz equation." 880 CALL flagerror(local_error,err,error,*999)
883 SELECT CASE(equations_set_setup%ACTION_TYPE)
889 local_error=
"The action type of "//
trim(
number_to_vstring(equations_set_setup%ACTION_TYPE,
"*",err,error))// &
891 &
" is invalid for a standard Helmholtz equation." 892 CALL flagerror(local_error,err,error,*999)
895 SELECT CASE(equations_set_setup%ACTION_TYPE)
897 IF(equations_set%DEPENDENT%DEPENDENT_FINISHED)
THEN 898 dependent_field=>equations_set%DEPENDENT%DEPENDENT_FIELD
899 IF(
ASSOCIATED(dependent_field))
THEN 900 geometric_field=>equations_set%GEOMETRY%GEOMETRIC_FIELD
901 IF(
ASSOCIATED(geometric_field))
THEN 902 CALL field_number_of_components_get(geometric_field,field_u_variable_type,number_of_dimensions,err,error,*999)
903 SELECT CASE(equations_set_setup%ANALYTIC_FUNCTION_TYPE)
906 IF(number_of_dimensions/=2)
THEN 907 local_error=
"The number of geometric dimensions of "// &
909 &
" is invalid. The analytic function type of "// &
911 &
" requires that there be 2 geometric dimensions." 912 CALL flagerror(local_error,err,error,*999)
918 local_error=
"The specified analytic function type of "// &
920 &
" is invalid for a standard Helmholtz equation." 921 CALL flagerror(local_error,err,error,*999)
924 CALL flagerror(
"Equations set geometric field is not associated.",err,error,*999)
927 CALL flagerror(
"Equations set dependent field is not associated.",err,error,*999)
930 CALL flagerror(
"Equations set dependent field has not been finished.",err,error,*999)
933 IF(
ASSOCIATED(equations_set%ANALYTIC))
THEN 934 analytic_field=>equations_set%ANALYTIC%ANALYTIC_FIELD
935 IF(
ASSOCIATED(analytic_field))
THEN 936 IF(equations_set%ANALYTIC%ANALYTIC_FIELD_AUTO_CREATED)
THEN 937 CALL field_create_finish(equations_set%DEPENDENT%DEPENDENT_FIELD,err,error,*999)
941 CALL flagerror(
"Equations set analytic is not associated.",err,error,*999)
944 local_error=
"The action type of "//
trim(
number_to_vstring(equations_set_setup%ACTION_TYPE,
"*",err,error))// &
946 &
" is invalid for a standard Helmholtz equation." 947 CALL flagerror(local_error,err,error,*999)
950 SELECT CASE(equations_set_setup%ACTION_TYPE)
952 IF(equations_set%DEPENDENT%DEPENDENT_FINISHED)
THEN 957 CALL flagerror(
"Equations set dependent field has not been finished.",err,error,*999)
960 SELECT CASE(equations_set%SOLUTION_METHOD)
974 SELECT CASE(equations%SPARSITY_TYPE)
984 local_error=
"The equations matrices sparsity type of "// &
986 CALL flagerror(local_error,err,error,*999)
990 CALL flagerror(
"Not implemented.",err,error,*999)
992 CALL flagerror(
"Not implemented.",err,error,*999)
994 CALL flagerror(
"Not implemented.",err,error,*999)
996 CALL flagerror(
"Not implemented.",err,error,*999)
998 CALL flagerror(
"Not implemented.",err,error,*999)
1000 local_error=
"The solution method of "//
trim(
number_to_vstring(equations_set%SOLUTION_METHOD,
"*",err,error))// &
1002 CALL flagerror(local_error,err,error,*999)
1005 local_error=
"The action type of "//
trim(
number_to_vstring(equations_set_setup%ACTION_TYPE,
"*",err,error))// &
1006 &
" for a setup type of "//
trim(
number_to_vstring(equations_set_setup%SETUP_TYPE,
"*",err,error))// &
1007 &
" is invalid for a standard Helmholtz equation." 1008 CALL flagerror(local_error,err,error,*999)
1011 local_error=
"The setup type of "//
trim(
number_to_vstring(equations_set_setup%SETUP_TYPE,
"*",err,error))// &
1012 &
" is invalid for a standard Helmholtz equation." 1013 CALL flagerror(local_error,err,error,*999)
1016 local_error=
"The equations set subtype of "//
trim(
number_to_vstring(equations_set%SPECIFICATION(3),
"*",err,error))// &
1017 &
" does not equal a standard Helmholtz equation subtype." 1018 CALL flagerror(local_error,err,error,*999)
1021 CALL flagerror(
"Equations set is not associated.",err,error,*999)
1024 exits(
"Helmholtz_EquationsSetStandardSetup")
1026 999 errorsexits(
"Helmholtz_EquationsSetStandardSetup",err,error)
1029 END SUBROUTINE helmholtz_equationssetstandardsetup
1036 SUBROUTINE helmholtz_equation_problem_setup(PROBLEM,PROBLEM_SETUP,ERR,ERROR,*)
1041 INTEGER(INTG),
INTENT(OUT) :: ERR
1046 enters(
"HELMHOLTZ_EQUATION_PROBLEM_SETUP",err,error,*999)
1048 IF(
ASSOCIATED(problem))
THEN 1049 IF(.NOT.
ALLOCATED(problem%SPECIFICATION))
THEN 1050 CALL flagerror(
"Problem specification is not allocated.",err,error,*999)
1051 ELSE IF(
SIZE(problem%SPECIFICATION,1)<3)
THEN 1052 CALL flagerror(
"Problem specification must have three entries for a Helmholtz equation problem.",err,error,*999)
1054 SELECT CASE(problem%SPECIFICATION(3))
1056 CALL helmholtz_equation_problem_standard_setup(problem,problem_setup,err,error,*999)
1058 CALL flagerror(
"Not implemented.",err,error,*999)
1061 &
" is not valid for a Helmholtz equation type of a classical field problem class." 1062 CALL flagerror(local_error,err,error,*999)
1065 CALL flagerror(
"Problem is not associated.",err,error,*999)
1068 exits(
"HELMHOLTZ_EQUATION_PROBLEM_SETUP")
1070 999 errorsexits(
"HELMHOLTZ_EQUATION_PROBLEM_SETUP",err,error)
1072 END SUBROUTINE helmholtz_equation_problem_setup
1079 SUBROUTINE helmholtz_problemspecificationset(problem,problemSpecification,err,error,*)
1083 INTEGER(INTG),
INTENT(IN) :: problemSpecification(:)
1084 INTEGER(INTG),
INTENT(OUT) :: err
1088 INTEGER(INTG) :: problemSubtype
1090 CALL enters(
"Helmholtz_ProblemSpecificationSet",err,error,*999)
1092 IF(
ASSOCIATED(problem))
THEN 1093 IF(
SIZE(problemspecification,1)==3)
THEN 1094 problemsubtype=problemspecification(3)
1095 SELECT CASE(problemsubtype)
1099 CALL flagerror(
"Not implemented.",err,error,*999)
1101 localerror=
"The third problem specification of "//
trim(
numbertovstring(problemsubtype,
"*",err,error))// &
1102 &
" is not valid for a Helmholtz equation type of a classical field problem class." 1103 CALL flagerror(localerror,err,error,*999)
1105 IF(
ALLOCATED(problem%specification))
THEN 1106 CALL flagerror(
"Problem specification is already allocated.",err,error,*999)
1108 ALLOCATE(problem%specification(3),stat=err)
1109 IF(err/=0)
CALL flagerror(
"Could not allocate problem specification.",err,error,*999)
1113 CALL flagerror(
"Helmholtz equation problem specification must have three entries.",err,error,*999)
1116 CALL flagerror(
"Problem is not associated.",err,error,*999)
1119 CALL exits(
"Helmholtz_ProblemSpecificationSet")
1121 999
CALL errors(
"Helmholtz_ProblemSpecificationSet",err,error)
1122 CALL exits(
"Helmholtz_ProblemSpecificationSet")
1125 END SUBROUTINE helmholtz_problemspecificationset
1132 SUBROUTINE helmholtz_equation_problem_standard_setup(PROBLEM,PROBLEM_SETUP,ERR,ERROR,*)
1137 INTEGER(INTG),
INTENT(OUT) :: ERR
1146 enters(
"HELMHOLTZ_EQUATION_PROBLEM_STANDARD_SETUP",err,error,*999)
1148 NULLIFY(control_loop)
1150 NULLIFY(solver_equations)
1152 IF(
ASSOCIATED(problem))
THEN 1153 IF(.NOT.
ALLOCATED(problem%SPECIFICATION))
THEN 1154 CALL flagerror(
"Problem specification is not allocated.",err,error,*999)
1155 ELSE IF(
SIZE(problem%SPECIFICATION,1)<3)
THEN 1156 CALL flagerror(
"Problem specification must have three entries for a Helmholtz equation problem.",err,error,*999)
1159 SELECT CASE(problem_setup%SETUP_TYPE)
1161 SELECT CASE(problem_setup%ACTION_TYPE)
1167 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
1169 &
" is invalid for a standard Helmholtz equation." 1170 CALL flagerror(local_error,err,error,*999)
1173 SELECT CASE(problem_setup%ACTION_TYPE)
1179 control_loop_root=>problem%CONTROL_LOOP
1183 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
1185 &
" is invalid for a standard Helmholtz equation." 1186 CALL flagerror(local_error,err,error,*999)
1190 control_loop_root=>problem%CONTROL_LOOP
1192 SELECT CASE(problem_setup%ACTION_TYPE)
1208 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
1210 &
" is invalid for a standard Helmholtz equation." 1211 CALL flagerror(local_error,err,error,*999)
1214 SELECT CASE(problem_setup%ACTION_TYPE)
1217 control_loop_root=>problem%CONTROL_LOOP
1229 control_loop_root=>problem%CONTROL_LOOP
1238 local_error=
"The action type of "//
trim(
number_to_vstring(problem_setup%ACTION_TYPE,
"*",err,error))// &
1240 &
" is invalid for a standard Helmholtz equation." 1241 CALL flagerror(local_error,err,error,*999)
1244 local_error=
"The setup type of "//
trim(
number_to_vstring(problem_setup%SETUP_TYPE,
"*",err,error))// &
1245 &
" is invalid for a standard Helmholtz equation." 1246 CALL flagerror(local_error,err,error,*999)
1249 local_error=
"The problem subtype of "//
trim(
number_to_vstring(problem%SPECIFICATION(3),
"*",err,error))// &
1250 &
" does not equal a standard Helmholtz equation subtype." 1251 CALL flagerror(local_error,err,error,*999)
1254 CALL flagerror(
"Problem is not associated.",err,error,*999)
1257 exits(
"HELMHOLTZ_EQUATION_PROBLEM_STANDARD_SETUP")
1259 999 errorsexits(
"HELMHOLTZ_EQUATION_PROBLEM_STANDARD_SETUP",err,error)
1261 END SUBROUTINE helmholtz_equation_problem_standard_setup
integer(intg), parameter equations_set_setup_dependent_type
Dependent variables.
integer(intg), parameter equations_set_fem_solution_method
Finite Element Method solution method.
This module contains all basis function routines.
integer(intg), parameter equations_set_setup_materials_type
Materials setup.
Contains information on the boundary conditions for the solver equations.
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.
Contains information on the equations mapping i.e., how field variable DOFS are mapped to the rows an...
Contains information about the equations in an equations set.
integer(intg), parameter equations_set_gfem_solution_method
Grid-based Finite Element Method solution method.
integer(intg), parameter problem_setup_control_type
Solver setup for a problem.
This module handles all problem wide constants.
integer(intg), parameter, public control_loop_node
The identifier for a each "leaf" node in a control loop.
integer(intg), parameter no_global_deriv
No global derivative i.e., u.
Converts a number to its equivalent varying string representation.
subroutine, public equations_create_start(EQUATIONS_SET, EQUATIONS, ERR, ERROR,)
Start the creation of equations for the equation set.
Contains information on the mesh decomposition.
subroutine, public equations_matrices_create_start(EQUATIONS, EQUATIONS_MATRICES, ERR, ERROR,)
Starts the creation of the equations matrices and rhs for the the equations.
Contains information on the type of solver to be used.
integer(intg), parameter, public solver_petsc_library
PETSc solver library.
subroutine, public solvers_number_set(SOLVERS, NUMBER_OF_SOLVERS, ERR, ERROR,)
Sets/changes the number of solvers.
integer(intg), parameter no_part_deriv
No partial derivative i.e., u.
This module handles all equations matrix and rhs routines.
subroutine, public solver_type_set(SOLVER, SOLVE_TYPE, ERR, ERROR,)
Sets/changes the type for a solver.
integer(intg), parameter equations_static
The equations are static and have no time dependence.
Contains information on an equations set.
This module handles all equations routines.
integer(intg), parameter equations_set_setup_source_type
Source setup.
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.
integer(intg), parameter first_part_deriv
First partial derivative i.e., du/ds.
This module contains routines for timing the program.
integer(intg), parameter solver_equations_static
Solver equations are static.
subroutine, public equations_time_dependence_type_set(EQUATIONS, TIME_DEPENDENCE_TYPE, ERR, ERROR,)
Sets/changes the time dependence type for equations.
subroutine, public solver_equations_sparsity_type_set(SOLVER_EQUATIONS, SPARSITY_TYPE, ERR, ERROR,)
Sets/changes the sparsity type for solver equations.
subroutine, public solvers_solver_get(SOLVERS, SOLVER_INDEX, SOLVER, ERR, ERROR,)
Returns a pointer to the specified solver in the list of solvers.
Contains information for a field defined on a region.
integer(intg), parameter, public equations_matrices_full_matrices
Use fully populated equation matrices.
subroutine, public equations_mapping_rhs_variable_type_set(EQUATIONS_MAPPING, RHS_VARIABLE_TYPE, ERR, ERROR,)
Sets the mapping between a dependent field variable and the equations set rhs vector.
integer(intg), parameter solver_equations_linear
Solver equations are linear.
integer(intg), parameter global_deriv_s2
First global derivative in the s2 direction i.e., du/ds2.
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.
integer(intg), parameter, public basis_default_quadrature_scheme
Identifier for the default quadrature scheme.
integer(intg), parameter problem_generalised_helmholtz_subtype
integer(intg), parameter problem_setup_solvers_type
Solver setup for a problem.
integer(intg), parameter equations_set_setup_equations_type
Equations setup.
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 equationsmapping_linearmatricesnumberset(EQUATIONS_MAPPING, NUMBER_OF_LINEAR_EQUATIONS_MATRICES, ERR, ERROR,)
Sets/changes the number of linear equations matrices.
integer(intg), parameter problem_setup_initial_type
Initial setup for a problem.
subroutine, public equationsmapping_linearmatricesvariabletypesset(EQUATIONS_MAPPING, LINEAR_MATRIX_VARIABLE_TYPES, ERR, ERROR,)
Sets the mapping between the dependent field variable types and the linear equations matrices...
subroutine, public solver_equations_linearity_type_set(SOLVER_EQUATIONS, LINEARITY_TYPE, ERR, ERROR,)
Sets/changes the linearity type for solver equations.
integer(intg), parameter equations_set_setup_start_action
Start setup action.
integer(intg), parameter problem_classical_field_class
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.
Contains information on the equations matrices and vectors.
integer(intg), parameter, public equations_matrix_fem_structure
Finite element matrix structure.
integer(intg), parameter equations_set_helmholtz_equation_type
This module contains all the low-level base routines e.g., all debug, control, and low-level communic...
integer(intg), parameter equations_set_helmholtz_equation_two_dim_1
u=cos(sqrt(2)*k*x)*sin(sqrt(2)*k*y)
Contains information of the linear matrices for equations matrices.
subroutine, public equations_matrices_linear_storage_type_set(EQUATIONS_MATRICES, STORAGE_TYPE, ERR, ERROR,)
Sets the storage type (sparsity) of the linear equations matrices.
subroutine, public equationsmatrices_linearstructuretypeset(EQUATIONS_MATRICES, STRUCTURE_TYPE, ERR, ERROR,)
Sets the structure (sparsity) of the linear equations matrices.
subroutine, public equations_mapping_create_finish(EQUATIONS_MAPPING, ERR, ERROR,)
Finishes the process of creating an equations mapping.
Returns the specified control loop as indexed by the control loop identifier from the control loop ro...
This module handles all Helmholtz equations routines.
subroutine, public equations_set_equations_get(EQUATIONS_SET, EQUATIONS, ERR, ERROR,)
Gets the equations for an equations set.
integer(intg), dimension(4) partial_derivative_first_derivative_map
PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(nic) gives the partial derivative index for the first derivat...
subroutine, public equations_create_finish(EQUATIONS, ERR, ERROR,)
Finish the creation of equations.
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, public matrix_compressed_row_storage_type
Matrix compressed row storage type.
integer(intg), parameter equations_set_gfv_solution_method
Grid-based Finite Volume solution method.
integer(intg), parameter equations_set_setup_geometry_type
Geometry setup.
integer(intg), parameter global_deriv_s1_s2
Global Cross derivative in the s1 and s2 direction i.e., d^2u/ds1ds2.
Contains information for a problem.
integer(intg), parameter equations_set_classical_field_class
integer(intg), parameter equations_linear
The equations are linear.
Contains the topology information for the nodes of a domain.
subroutine, public equations_matrices_create_finish(EQUATIONS_MATRICES, ERR, ERROR,)
Finishes the creation of the equations matrices and RHS for the the equations.
This module handles all distributed matrix vector routines.
integer(intg), parameter global_deriv_s1
First global derivative in the s1 direction i.e., du/ds1.
This module handles all boundary conditions routines.
This module handles all solver routines.
subroutine, public equations_mapping_create_start(EQUATIONS, EQUATIONS_MAPPING, ERR, ERROR,)
Finishes the process of creating an equations mapping for a equations set equations.
integer(intg), parameter problem_helmholtz_equation_type
Contains information about an equations matrix.
Contains information for a particular quadrature scheme.
This module contains all routines dealing with (non-distributed) matrix and vectors types...
subroutine, public equations_linearity_type_set(EQUATIONS, LINEARITY_TYPE, ERR, ERROR,)
Sets/changes the linearity type for equations.
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.
Sets a boundary condition on the specified local DOF.
Contains information for a field variable defined on a field.
integer(intg), parameter equations_set_fd_solution_method
Finite Difference solution method.
integer(intg), parameter, public equations_matrices_sparse_matrices
Use sparse equations matrices.
Contains information on the setup information for an equations set.
A pointer to the domain decomposition for this domain.
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 problem_standard_helmholtz_subtype
integer(intg), parameter, public boundary_condition_fixed
The dof is fixed as a boundary condition.
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, public solver_solver_equations_get(SOLVER, SOLVER_EQUATIONS, ERR, ERROR,)
Returns a pointer to the solver equations for a solver.
Contains all information about a basis .
integer(intg), parameter equations_set_fv_solution_method
Finite Volume solution method.
integer(intg), parameter, public matrix_block_storage_type
Matrix block storage type.
integer(intg), parameter equations_set_setup_initial_type
Initial setup.
recursive subroutine, public control_loop_create_finish(CONTROL_LOOP, ERR, ERROR,)
Finish the process of creating a control loop.
integer(intg), parameter equations_set_setup_analytic_type
Analytic setup.
Flags an error condition.
integer(intg), parameter, public solver_linear_type
A linear solver.
Contains information of the RHS vector for equations matrices.
integer(intg), parameter equations_set_standard_helmholtz_subtype
Contains information for mapping field variables to the linear matrices in the equations set of the m...
This module contains all kind definitions.
integer(intg), parameter equations_set_setup_finish_action
Finish setup action.
integer(intg), parameter equations_set_generalised_helmholtz_subtype