get_observations_thc Subroutine

subroutine get_observations_thc(self, obs_values, domain, properties, nodal_temperature, nodal_porosity, nodal_pw)

Arguments

Type IntentOptional Attributes Name
class(type_output_observation), intent(inout) :: self
real(kind=real64), intent(out) :: obs_values(:)
type(type_domain), intent(inout), optional :: domain
type(type_properties_manager), intent(inout), optional :: properties
real(kind=real64), intent(in), optional :: nodal_temperature(:)
real(kind=real64), intent(in), optional :: nodal_porosity(:)
real(kind=real64), intent(in), optional :: nodal_pw(:)

Calls

proc~~get_observations_thc~~CallsGraph proc~get_observations_thc get_observations_thc none~calc_qw type_properties_manager%calc_qw proc~get_observations_thc->none~calc_qw none~calc_thc type_properties_manager%calc_thc proc~get_observations_thc->none~calc_thc none~to_original_value type_reordering%to_original_value proc~get_observations_thc->none~to_original_value proc~get_algorithm_name type_reordering%get_algorithm_name proc~get_observations_thc->proc~get_algorithm_name proc~get_group abst_mesh%get_group proc~get_observations_thc->proc~get_group proc~calculate_qw_array type_properties_manager%calculate_qw_array none~calc_qw->proc~calculate_qw_array proc~calculate_qw_scalar type_properties_manager%calculate_qw_scalar none~calc_qw->proc~calculate_qw_scalar proc~calculate_thc_array type_properties_manager%calculate_thc_array none~calc_thc->proc~calculate_thc_array proc~calculate_thc_scalar type_properties_manager%calculate_thc_scalar none~calc_thc->proc~calculate_thc_scalar interface~to_original_values_int32 type_reordering%to_original_values_int32 none~to_original_value->interface~to_original_values_int32 interface~to_original_values_real64 type_reordering%to_original_values_real64 none~to_original_value->interface~to_original_values_real64 proc~to_original_values_int32 to_original_values_int32 interface~to_original_values_int32->proc~to_original_values_int32 proc~to_original_values_real64 to_original_values_real64 interface~to_original_values_real64->proc~to_original_values_real64 none~calc_water_content type_properties_manager%calc_water_content proc~calculate_qw_array->none~calc_water_content proc~get_pointers_for_region type_properties_manager%get_pointers_for_region proc~calculate_qw_array->proc~get_pointers_for_region proc~calculate_qw_scalar->none~calc_water_content proc~calculate_qw_scalar->proc~get_pointers_for_region proc~calculate_thc_impl_array type_properties_manager%calculate_thc_impl_array proc~calculate_thc_array->proc~calculate_thc_impl_array proc~calculate_thc_array->proc~get_pointers_for_region proc~calculate_thc_impl_scalar type_properties_manager%calculate_thc_impl_scalar proc~calculate_thc_scalar->proc~calculate_thc_impl_scalar proc~calculate_thc_scalar->proc~get_pointers_for_region proc~calculate_water_content type_properties_manager%calculate_water_content none~calc_water_content->proc~calculate_water_content proc~calculate_water_content_array type_properties_manager%calculate_water_content_array none~calc_water_content->proc~calculate_water_content_array proc~calculate_thc_impl_array->none~calc_water_content proc~calculate_thc_impl_array->proc~calculate_thc_impl_scalar calc calc proc~calculate_thc_impl_scalar->calc proc~calculate_thc_impl_scalar->proc~calculate_water_content proc~get_den_ptr type_material_manager%get_den_ptr proc~get_pointers_for_region->proc~get_den_ptr proc~get_gcc_ptr type_material_manager%get_gcc_ptr proc~get_pointers_for_region->proc~get_gcc_ptr proc~get_hcf_ptr type_material_manager%get_hcf_ptr proc~get_pointers_for_region->proc~get_hcf_ptr proc~get_thc_ptr type_material_manager%get_thc_ptr proc~get_pointers_for_region->proc~get_thc_ptr proc~get_vhc_ptr type_material_manager%get_vhc_ptr proc~get_pointers_for_region->proc~get_vhc_ptr proc~get_wrf_ptr type_material_manager%get_wrf_ptr proc~get_pointers_for_region->proc~get_wrf_ptr proc~calculate_water_content->calc proc~calculate_water_content_array->proc~calculate_water_content

Source Code

    subroutine get_observations_thc(self, obs_values, domain, properties, &
                                    nodal_temperature, nodal_porosity, nodal_pw)
        implicit none
        class(type_output_observation), intent(inout) :: self
        real(real64), intent(out) :: obs_values(:)
        type(type_domain), intent(inout), optional :: domain
        type(type_properties_manager), intent(inout), optional :: properties
        real(real64), intent(in), optional :: nodal_temperature(:)
        real(real64), intent(in), optional :: nodal_porosity(:)
        real(real64), intent(in), optional :: nodal_pw(:)

        type(type_state) :: state
        integer(int32) :: iObs, group_id
        real(real64), allocatable :: original_temperature(:)
        real(real64), allocatable :: original_porosity(:)
        integer(int32) :: istat

        ! Initialize to zero
        obs_values(:) = 0.0d0
        if (.not. present(nodal_temperature)) return
        if (.not. present(nodal_porosity)) return
        if (.not. present(properties)) return
        if (.not. present(nodal_pw)) state%pressure = 101325.0d0

        if (.not. domain%reordering%get_algorithm_name() == "none") then
            allocate (original_temperature, mold=nodal_temperature)
            allocate (original_porosity, mold=nodal_porosity)
            call domain%reordering%to_original_value(nodal_temperature, original_temperature)
            call domain%reordering%to_original_value(nodal_porosity, original_porosity)
        else
            allocate (original_temperature, source=nodal_temperature)
            allocate (original_porosity, source=nodal_porosity)
        end if

        do iObs = 1, self%num_observations
            state%temperature = original_temperature(self%node_ids(iObs))
            state%porosity = nodal_porosity(self%node_ids(iObs))
            group_id = self%elements(iObs)%e%get_group()
            state%water_content = properties%calc_qw(group_id, state)
            if (state%water_content > state%porosity) state%water_content = state%porosity
            if (state%water_content < 0.0d0) state%water_content = 0.0d0
            obs_values(iObs) = properties%calc_thc(group_id, state)
        end do

        deallocate (original_temperature)
        deallocate (original_porosity)

    end subroutine get_observations_thc