| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(type_thermal_crs), | intent(inout) | :: | self | |||
| type(type_domain), | intent(inout) | :: | domain | |||
| type(type_properties_manager), | intent(in) | :: | property | |||
| type(type_variable), | intent(inout) | :: | temperature | |||
| type(type_variable), | intent(inout) | :: | porosity | |||
| type(type_controls), | intent(inout) | :: | controls | |||
| type(type_bc), | intent(inout) | :: | bc |
module subroutine compute_type_thermal_crs(self, domain, property, temperature, porosity, controls, bc) implicit none ! Arguments class(type_thermal_crs), intent(inout) :: self type(type_domain), intent(inout) :: domain type(type_properties_manager), intent(in) :: property type(type_variable), intent(inout) :: temperature type(type_variable), intent(inout) :: porosity type(type_controls), intent(inout) :: controls type(type_bc), intent(inout) :: bc ! Local variables integer(int32) :: actual_order integer(int32) :: mode_bc call controls%time%profile_start("Setup") select case (self%algorithm) case ("none") mode_bc = mode_value case default mode_bc = mode_nr end select call controls%time%profile_stop("Setup") NR_LOOP_THERMAL: do while (controls%iteration%should_continue()) call controls%time%profile_start("Setup") call controls%iteration%increment_step() call controls%time%profile_stop("Setup") call controls%time%profile_start("Assemble") actual_order = min(self%order, controls%iteration%get_step()) call self%assemble_global(self%KT_star, self%PHIT, domain, temperature, porosity, property, controls, actual_order) call controls%time%profile_stop("Assemble") call controls%time%profile_start("Setup") call bc%apply_crs(boundary_target='thermal', & current_time=controls%time%get_time(), & A=self%KT_star, & b=self%PHIT, & Domain=Domain, & mode=mode_bc) if (controls%iteration%get_step() == 1) call controls%iteration%set_initial_norms(res_vec=self%PHIT) call controls%time%profile_stop("Setup") call controls%time%profile_start("Solve") call self%solve(temperature, controls) call controls%time%profile_stop("Solve") call controls%time%profile_start("Setup") if (controls%iteration%get_step() == 1) call controls%iteration%set_initial_norms(upd_vec=temperature%dif(:)) call controls%iteration%check_convergence(self%PHIT, temperature%dif(:)) temperature%pre(:) = temperature%new(:) call controls%time%profile_stop("Setup") end do NR_LOOP_THERMAL end subroutine compute_type_thermal_crs