required_variables_for_implicit_2D_heat_diffusion Subroutine

public subroutine required_variables_for_implicit_2D_heat_diffusion(me, nb_e, sim)

Arguments

Type IntentOptional Attributes Name
type(mesh2D_t), intent(inout) :: me
integer, intent(in) :: nb_e
type(simulation_t), intent(in) :: sim

Calls

proc~~required_variables_for_implicit_2d_heat_diffusion~~CallsGraph proc~required_variables_for_implicit_2d_heat_diffusion required_variables_for_implicit_2D_heat_diffusion proc~material_thermal_conductivity material_t%material_thermal_conductivity proc~required_variables_for_implicit_2d_heat_diffusion->proc~material_thermal_conductivity proc~material_thermal_conductivity_der material_t%material_thermal_conductivity_der proc~required_variables_for_implicit_2d_heat_diffusion->proc~material_thermal_conductivity_der proc~signal_v0d signal_t%signal_v0d proc~required_variables_for_implicit_2d_heat_diffusion->proc~signal_v0d proc~signal_v1d signal_t%signal_v1d proc~signal_v0d->proc~signal_v1d

Called by

proc~~required_variables_for_implicit_2d_heat_diffusion~~CalledByGraph proc~required_variables_for_implicit_2d_heat_diffusion required_variables_for_implicit_2D_heat_diffusion proc~heat_diffusion_mesh2d heat_diffusion_mesh2D proc~heat_diffusion_mesh2d->proc~required_variables_for_implicit_2d_heat_diffusion proc~main_loop main_loop proc~main_loop->proc~heat_diffusion_mesh2d program~reims_p reims_p program~reims_p->proc~main_loop

Source Code

subroutine required_variables_for_implicit_2D_heat_diffusion(me,nb_e,sim)
     
    type(mesh2D_t), intent(inout) :: me
    integer, intent(in) :: nb_e
    type(simulation_t), intent(in) :: sim

    real(dp) :: TL,TR,Tint,NormQTf,DerNormQTf,lambdL,dlambdLdT,lambdR,dlambdRdT,DerTintSELF,DerTintOTH,Fact,Num,Den
    integer :: jj, i
    logical :: foundEdgeLab

    TL=me%StVar%temp(nb_e)

    do i = 1, size(me%label%regionArr)
        if(trim(me%M2D_Prop%elem(nb_e)%PhysE)==trim(me%label%regionArr(i)%id)) then
            lambdL=me%label%regionArr(i)%mat%thermal_conductivity(TL)
            dlambdLdT=me%label%regionArr(i)%mat%thermal_conductivity_der(TL)
            exit
        endif
    enddo

    me%flxS%SomNormQT(nb_e)=0.0_dp
    me%flxS%DerSomNormQT(nb_e)=0.0_dp
    me%flxS%DerNormQTOth2D(nb_e,:)=0.0_dp
    do jj=1,3

        if((jj==3 .and. me%M2D_Prop%elem(nb_e)%NbNeigh==2) .or. &
           (jj==3 .and. me%M2D_Prop%elem(nb_e)%NbNeigh==1) .or. &
           (jj==2 .and. me%M2D_Prop%elem(nb_e)%NbNeigh==1)) then       ! Boundary condition

            foundEdgeLab=.false.
            do i = 1, size(me%label%edgeArr)
                if(trim(me%M2D_Prop%elem(nb_e)%PhysN(jj))==trim(me%label%edgeArr(i)%id)) then
                    if(me%label%edgeArr(i)%type=='flux') then
                        NormQTf=-(me%label%edgeArr(i)%value%v0d()/(me%label%edgeArr(i)%LengthBC*me%extrusion_length))*&
                                me%M2D_Prop%elem(nb_e)%face(jj)
                        DerNormQTf=0.0_dp
                        foundEdgeLab=.true.
                        exit
                    else if(me%label%edgeArr(i)%type=='temp') then
                        NormQTf=-(lambdL/me%M2D_Prop%elem(nb_e)%Delta(jj))*(me%label%edgeArr(i)%value%v0d()-TL)*&
                                me%M2D_Prop%elem(nb_e)%face(jj)
                        DerNormQTf=-(me%M2D_Prop%elem(nb_e)%face(jj)/me%M2D_Prop%elem(nb_e)%Delta(jj))*&
                                   (dlambdLdT*(me%label%edgeArr(i)%value%v0d()-TL)-lambdL)       
                        foundEdgeLab=.true.
                        exit                 
                    else
                        print*,'edge label type not recognized - mesh2D'
                        stop
                    endif
                endif
            enddo
            if(.not.foundEdgeLab)then            ! SS Link expected
                NormQTf=0.0_dp
                DerNormQTf=0.0_dp
            endif

        else ! neighbor in the internal domain

            TR=me%StVar%temp(me%M2D_Prop%elem(nb_e)%Neigh(jj))

            do i = 1, size(me%label%regionArr)
                if(trim(me%M2D_Prop%elem(nb_e)%PhysN(jj))==trim(me%label%regionArr(i)%id)) then
                    lambdR=me%label%regionArr(i)%mat%thermal_conductivity(TR)
                    dlambdRdT=me%label%regionArr(i)%mat%thermal_conductivity_der(TR)
                    exit
                endif
            enddo

            Num=lambdL*me%M2D_Prop%elem(nb_e)%DeltaNeigh(jj)*TL+lambdR*me%M2D_Prop%elem(nb_e)%Delta(jj)*TR
            Den=lambdL*me%M2D_Prop%elem(nb_e)%DeltaNeigh(jj)+lambdR*me%M2D_Prop%elem(nb_e)%Delta(jj)
            Tint=Num/Den

            DerTintSELF=((dlambdLdT*me%M2D_Prop%elem(nb_e)%DeltaNeigh(jj)*TL+lambdL*me%M2D_Prop%elem(nb_e)%DeltaNeigh(jj))*Den-&
                        Num*(dlambdLdT*me%M2D_Prop%elem(nb_e)%DeltaNeigh(jj)))/(Den**2)   
            DerTintOTH=((dlambdRdT*me%M2D_Prop%elem(nb_e)%Delta(jj)*TR+lambdR*me%M2D_Prop%elem(nb_e)%Delta(jj))*Den-Num*&
                       (dlambdRdT*me%M2D_Prop%elem(nb_e)%Delta(jj)))/(Den**2)                  

            Fact=-me%M2D_Prop%elem(nb_e)%face(jj)/me%M2D_Prop%elem(nb_e)%Delta(jj)
            NormQTf=Fact*lambdL*(Tint-TL)

            DerNormQTf=Fact*(dlambdLdT*(Tint-TL)+lambdL*(DerTintSELF-1.0_dp))
            me%flxS%DerNormQTOth2D(nb_e,jj)=Fact*lambdL*DerTintOTH            

        endif

        me%flxS%SomNormQT(nb_e)=me%flxS%SomNormQT(nb_e)+NormQTf
        me%flxS%DerSomNormQT(nb_e)=me%flxS%DerSomNormQT(nb_e)+DerNormQTf
    enddo

end subroutine required_variables_for_implicit_2D_heat_diffusion