00001 subroutine source_trfreeG_WL_EMF(souten)
00002 use grid_parameter, only : nrg, ntg, npg, nrf, ntf, npf, ntgeq
00003 use coordinate_grav_r, only : hrg
00004 use interface_sourceterm_trfreeG_WL
00005 use interface_sourceterm_trfreeG_WL_EMF
00006 use interface_sourceterm_trfreeG_WL_SEM
00007 use interface_interpo_fl2gr_midpoint
00008 use interface_correct_matter_source_midpoint
00009 use make_array_3d
00010 use make_array_4d
00011 implicit none
00012 real(8), pointer :: souten(:,:,:,:)
00013 real(8), pointer :: soutenf(:,:,:,:), souf(:,:,:), soug(:,:,:)
00014 real(8), pointer :: sou1(:,:,:,:), sou2(:,:,:,:), sou3(:,:,:,:)
00015 integer :: ia, irg, itg, ipg
00016
00017 call alloc_array4d(sou1,0,nrg,0,ntg,0,npg,1,6)
00018 call alloc_array4d(sou2,0,nrg,0,ntg,0,npg,1,6)
00019 call alloc_array4d(sou3,0,nrg,0,ntg,0,npg,1,6)
00020 call alloc_array4d(soutenf,0,nrf,0,ntf,0,npf,1,6)
00021 call alloc_array3d(souf,0,nrf,0,ntf,0,npf)
00022 call alloc_array3d(soug,0,nrg,0,ntg,0,npg)
00023
00024 call sourceterm_trfreeG_WL(sou1)
00025 call sourceterm_trfreeG_WL_EMF(sou2)
00026
00027 call sourceterm_trfreeG_WL_SEM(soutenf)
00028
00029 do ia = 1, 6
00030 souf(0:nrf,0:ntf,0:npf) = soutenf(0:nrf,0:ntf,0:npf,ia)
00031 call interpo_fl2gr_midpoint(souf,soug)
00032 call correct_matter_source_midpoint(soug)
00033 sou3(0:nrg,0:ntg,0:npg,ia) = soug(0:nrg,0:ntg,0:npg)
00034 end do
00035 souten(0:nrg,0:ntg,0:npg,1:6) = sou1(0:nrg,0:ntg,0:npg,1:6) &
00036 & + sou2(0:nrg,0:ntg,0:npg,1:6) &
00037 & + sou3(0:nrg,0:ntg,0:npg,1:6)
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 deallocate(sou1)
00056 deallocate(sou2)
00057 deallocate(sou3)
00058 deallocate(soutenf)
00059 deallocate(souf)
00060 deallocate(soug)
00061
00062 end subroutine source_trfreeG_WL_EMF