convxc Subroutine

public subroutine convxc(xc, nn)

Routine to convert scaled iteration variables back to their real values author: P J Knight, CCFE, Culham Science Centre author: J Morris, CCFE, Culham Science Centre xc(ipnvars) : input/output real array : scaled iteration variable values nn : input integer : number of iteration variables This subroutine converts the scaled iteration variables back to their real values.

Arguments

Type IntentOptional AttributesName
real(kind=dp), intent(in), dimension(:):: xc
integer, intent(in) :: nn

Contents

Source Code


Source Code

  subroutine convxc(xc,nn)

    !! Routine to convert scaled iteration variables back to
    !! their real values
    !! author: P J Knight, CCFE, Culham Science Centre
    !! author: J Morris, CCFE, Culham Science Centre
    !! xc(ipnvars) : input/output real array : scaled iteration variable values
    !! nn : input integer : number of iteration variables
    !! This subroutine converts the scaled iteration variables back to
    !! their real values.
    !
    ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    use error_handling, only: idiags, fdiags, report_error
    use numerics, only: ipnvars, scale, ixc, lablxc
    use maths_library, only: variable_error
#ifndef dp
    use, intrinsic :: iso_fortran_env, only: dp=>real64
#endif

    implicit none

    !  Arguments

    integer, intent(in) :: nn
    real(dp), dimension(:), intent(in) :: xc

    !  Local variables

    integer :: i
    real(dp)::ratio

    ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    do i = 1,nn
       ratio = xc(i)/scale(i)

       select case (ixc(i))
           case (1);  call set_itv_1(ratio)
           case (2);  call set_itv_2(ratio)
           case (3);  call set_itv_3(ratio)
           case (4);  call set_itv_4(ratio)
           case (5);  call set_itv_5(ratio)
           case (6);  call set_itv_6(ratio)
           case (7);  call set_itv_7(ratio)
           case (8);  call set_itv_8(ratio)
           case (9);  call set_itv_9(ratio)
           case (10);  call set_itv_10(ratio)
           case (11);  call set_itv_11(ratio)
           case (12);  call set_itv_12(ratio)
           case (13);  call set_itv_13(ratio)
           case (14);  call set_itv_14(ratio)
           case (15);  call set_itv_15(ratio)
           case (16);  call set_itv_16(ratio)
           case (17);  call set_itv_17(ratio)
           case (18);  call set_itv_18(ratio)
           case (19);  call set_itv_19(ratio)
           case (20);  call set_itv_20(ratio)
           case (21);  call set_itv_21(ratio)
           case (22);
           case (23);  call set_itv_23(ratio)
           case (24);
           case (25);  call set_itv_25(ratio)
           case (26);  call set_itv_26(ratio)
           case (27);  call set_itv_27(ratio)
           case (28);  call set_itv_28(ratio)
           case (29);  call set_itv_29(ratio)
           case (30);  call set_itv_30(ratio)
           case (31);  call set_itv_31(ratio)
           case (32);  call set_itv_32(ratio)
           case (33);  call set_itv_33(ratio)
           case (34);  call set_itv_34(ratio)
           case (35);  call set_itv_35(ratio)
           case (36);  call set_itv_36(ratio)
           case (37);  call set_itv_37(ratio)
           case (38);  call set_itv_38(ratio)
           case (39);  call set_itv_39(ratio)
           case (40);  call set_itv_40(ratio)
           case (41);  call set_itv_41(ratio)
           case (42);  call set_itv_42(ratio)
           case (43);
           case (44);  call set_itv_44(ratio)
           case (45);  call set_itv_45(ratio)
           case (46);  call set_itv_46(ratio)
           case (47);  call set_itv_47(ratio)
           case (48);  call set_itv_48(ratio)
           case (49);  call set_itv_49(ratio)
           case (50);  call set_itv_50(ratio)
           case (51);  call set_itv_51(ratio)
           case (52);
           case (53);  call set_itv_53(ratio)
           case (54);  call set_itv_54(ratio)
           case (55);
           case (56);  call set_itv_56(ratio)
           case (57);  call set_itv_57(ratio)
           case (58);  call set_itv_58(ratio)
           case (59);  call set_itv_59(ratio)
           case (60);  call set_itv_60(ratio)
           case (61);  call set_itv_61(ratio)
           case (62);  call set_itv_62(ratio)
           case (63);  call set_itv_63(ratio)
           case (64);  call set_itv_64(ratio)
           case (65);  call set_itv_65(ratio)
           case (66);  call set_itv_66(ratio)
           case (67);  call set_itv_67(ratio)
           case (68);  call set_itv_68(ratio)
           case (69);  call set_itv_69(ratio)
           case (70);  call set_itv_70(ratio)
           case (71);  call set_itv_71(ratio)
           case (72);  call set_itv_72(ratio)
           case (73);  call set_itv_73(ratio)
           case (74);  call set_itv_74(ratio)
           case (75);  call set_itv_75(ratio)
           case (76);
           case (77);
           case (78);
           case (79);  call set_itv_79(ratio)
           case (80);
           case (81);  call set_itv_81(ratio)
           case (82);  call set_itv_82(ratio)
           case (83);  call set_itv_83(ratio)
           case (84);  call set_itv_84(ratio)
           case (85);  call set_itv_85(ratio)
           case (86);  call set_itv_86(ratio)
           case (87);
           case (88);
           case (89);  call set_itv_89(ratio)
           case (90);  call set_itv_90(ratio)
           case (91);  call set_itv_91(ratio)
           case (92);  call set_itv_92(ratio)
           case (93);  call set_itv_93(ratio)
           case (94);  call set_itv_94(ratio)
           case (95);  call set_itv_95(ratio)
           case (96);  call set_itv_96(ratio)
           case (97);  call set_itv_97(ratio)
           case (98);  call set_itv_98(ratio)
           case (99);
           case (100);
           case (101);
           case (102);
           case (103);  call set_itv_103(ratio)
           case (104);  call set_itv_104(ratio)
           case (105);  call set_itv_105(ratio)
           case (106);  call set_itv_106(ratio)
           case (107);  call set_itv_107(ratio)
           case (108);  call set_itv_108(ratio)
           case (109);  call set_itv_109(ratio)
           case (110);  call set_itv_110(ratio)
           case (111);  call set_itv_111(ratio)
           case (112);  call set_itv_112(ratio)
           case (113);  call set_itv_113(ratio)
           case (114);  call set_itv_114(ratio)
           case (115);  call set_itv_115(ratio)
           case (116);  call set_itv_116(ratio)
           case (117);  call set_itv_117(ratio)
           case (118);  call set_itv_118(ratio)
           case (119);  call set_itv_119(ratio)
           case (120);  call set_itv_120(ratio)
           case (121);  call set_itv_121(ratio)
           case (122);  call set_itv_122(ratio)
           case (123);  call set_itv_123(ratio)
           case (124);  call set_itv_124(ratio)
           case (125);  call set_itv_125(ratio)
           case (126);  call set_itv_126(ratio)
           case (127);  call set_itv_127(ratio)
           case (128);  call set_itv_128(ratio)
           case (129);  call set_itv_129(ratio)
           case (130);  call set_itv_130(ratio)
           case (131);  call set_itv_131(ratio)
           case (132);  call set_itv_132(ratio)
           case (133);  call set_itv_133(ratio)
           case (134);  call set_itv_134(ratio)
           case (135);  call set_itv_135(ratio)
           case (136);  call set_itv_136(ratio)
           case (137);  call set_itv_137(ratio)
           case (138);  call set_itv_138(ratio)
           case (139);  call set_itv_139(ratio)
           case (140);  call set_itv_140(ratio)
           case (141);  call set_itv_141(ratio)
           case (142);  call set_itv_142(ratio)
           case (143);  call set_itv_143(ratio)
           case (144);  call set_itv_144(ratio)
           case (145);  call set_itv_145(ratio)
           case (146);  call set_itv_146(ratio)
           case (147);  call set_itv_147(ratio)
           case (148);  call set_itv_148(ratio)
           case (149);  call set_itv_149(ratio)
           case (150);
           case (151);
           case (152);  call set_itv_152(ratio)
           case (153);  call set_itv_153(ratio)
           case (154);  call set_itv_154(ratio)
           case (155);  call set_itv_155(ratio)
           case (156);  call set_itv_156(ratio)
           case (157);  call set_itv_157(ratio)
           case (158);  call set_itv_158(ratio)
           case (159);  call set_itv_159(ratio)
           case (160);  call set_itv_160(ratio)
           case (161);  call set_itv_161(ratio)
           case (162);  call set_itv_162(ratio)
           case (163);  call set_itv_163(ratio)
           case (164);  call set_itv_164(ratio)
           case (165);  call set_itv_165(ratio)
           case (166);  call set_itv_166(ratio)
           case (167);  call set_itv_167(ratio)
           case (168);  call set_itv_168(ratio)
           case (169);  call set_itv_169(ratio)
           case (170);  call set_itv_170(ratio)
           case (171);  call set_itv_171(ratio)
           case (172);  call set_itv_172(ratio)
            ! DUMMY Cases
           case (173);  call set_itv_173(ratio)
           case (174);  call set_itv_174(ratio)
           case (175);  call set_itv_175(ratio)

           case default
              call report_error(57)

       end select

       !  Check that no iteration variable is zero

       if (abs(xc(i)) <= 1.0D-12) then
          idiags(1) = i ; idiags(2) = ixc(i)
          write(*,*) 'Iteration variable ',ixc(i),'(',trim(lablxc(ixc(i))),') is zero.'
          call report_error(58)
       end if

       !  Crude method of catching NaN errors

       !if ((abs(xc(i)) > 9.99D99).or.(xc(i) /= xc(i))) then
       if(variable_error(xc(i)))then
          idiags(1) = i ; idiags(2) = ixc(i) ; fdiags(1) = xc(i)
          call report_error(59)
       end if

       if (abs(scale(i)) < 1.0D-99) then
          idiags(1) = i ; idiags(2) = ixc(i)
          call report_error(60)
       end if

    end do

  end subroutine convxc