abc プロジェクト
14.8.19. OutputAutoExecCode メンバ関数説明 |
メンバ関数名 | OutputAutoExecCode |
定義ファイル名 | TuneRegion.cpp |
定義行 | 1328 |
所属名 | TTuneRegion |
アクセス属性 | public |
宣言形式 | void OutputAutoExecCode ( FILE * fp ) |
概要 | 時間計測を行うための ATexec サブルーチンのコードの生成を行う。 |
戻り値 | |
パラメタ説明 | fp 出力先ファイルポインタ |
機能説明 | |
備考 | |
呼出し元関数一覧表
呼出し先関数一覧表
参照外部変数一覧表
参照メンバ変数一覧表
参照先一覧表
関数論理チャート
| +------------------------------------------------+
1328 +--+ void TTuneRegion::OutputAutoExecCode(FILE *fp) |
1329 | { |
+--+---------------------------------------------+
1330 +--- int idx,Data;
1331 +--- int i,j,k,DefPosS;
1332 +--- AnsiString s;
1333 +--- TValData *ValData;
1334 +--- TToken *Token;
1335 +--- int CaseArrayCount;
1336 +--- int BaseValIdx;
1337 +--- AnsiString ValName;
1338 +--- AnsiString BaseValName;
1339 +--- int ParamValIdx;
1340 +--- int EndTuneSizeData;
1341 |
1342 +--- bool VisualF = MainF->VisualF;
1343 |
1344 +--- BaseValName = BaseValList->Strings[0];
1345 +--- CaseArrayCount = CaseCount;
| +------------------------+
1346 +--+ if(FittingType != 0){ |
| +--+---------------------+
1347 | +--- CaseArrayCount = SampledList->Count;
| +-+---+
1348 | | } |
| +-----+
1349 +--- fprintf(fp,"c ==== %s Optimization Routines\n",TuneGroupName);
1350 +--- fprintf(fp,"c ==============================================================\n");
| +------------------------------+
1351 +--+ if(TuneGroup != tgDynamic){ |
| +--+---------------------------+
1352 | +--- s.printf(" subroutine ABCLib_ATexec%s%s(ABCLib_Routines)\n",TuneGroupName,Name);
1353 | +--- fprintf(fp,"%s",SepLongStr(s).c_str());
1354 | +--- fprintf(fp," character*%d ABCLib_Routines\n",MainF->CharMaxLen);
| +-+---+
1355 | | } |
| +-+---+
| +-+-------+
1355 | | else{ |
| +-+-------+
1356 | +--- s.printf(" subroutine ABCLib_ATexec%s%s(ABCLib_Routines,%s,iBestSw1)\n",
1357 | | // TuneGroupName,Name,PROB_VALN);
1358 | | TuneGroupName,Name,BaseValName);
1359 | +--- fprintf(fp,"%s",SepLongStr(s).c_str());
1360 | +--- fprintf(fp," character*%d ABCLib_Routines\n",MainF->CharMaxLen);
1361 | +--- // fprintf(fp," integer %s\n",PROB_VALN);
1362 | +--- fprintf(fp," integer %s\n",BaseValName);
1363 | +--- fprintf(fp," integer iBestSw1\n");
| +-+---+
1364 | | } |
| +-----+
1365 +--- fprintf(fp,"\n");
1366 +--- fprintf(fp," include 'ABCLibScript.h'\n");
1367 +--- fprintf(fp,"\n");
1368 |
1369 +--- //
1370 | // チューニングに使用する引数宣言
1371 | // 配列の添え字部分が、N 一致する場合は、NN に置換(変数名固定)
1372 | // 配列の添え字部分が、基本パラメタ名(N等) 一致する場合は、
1373 | // 基本パラメタ名*2(NN等) に置換(変数名固定->可変 2009/03/05)
1374 | //
1375 +--- EndTuneSizeData = -1;
1376 +--- idx = Pass4->ABCLib_ValList->IndexOf("ABCLib_ENDTUNESIZE");
| +----------------+
1377 +--+ if(idx == -1){ |
| +--+-------------+
1378 | +--- /*
1379 | | if(TuneGroup != tgDynamic){
1380 | | MainF->err("ABCLib_ENDTUNESIZEが設定されていません。");
1381 | | return;
1382 | | }
1383 | | */
1384 | +--- //
1385 | | // ABCLib_ENDTUNESIZEがない場合は、 PROB_VALN,PROB_VALNNの変数を検索して
1386 | | // その Parm値を使用する。(N,NN固定が前提となる)
1387 | | //
1388 | +--- int kk;
1389 | |
1390 | +--- ValName = BaseValList->Strings[0];
| | +------------------------------------------------+
1391 | +--+ for(kk = 0 ; kk < ValDataList->Count ; kk++){ |
| | +--+---------------------------------------------+
1392 | | +--- ValData = (TValData *)ValDataList->Items[kk];
| | | +----------------------+
1393 | | +--+ if(ValData == NULL){ |
| | | +--+-------------------+
| | | | +------------+
1394 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
1395 | | | | } |
| | | +-----+
| | | +----------------------------------+
1396 | | +--+ if(ValData->ParamValF == false){ |
| | | +--+-------------------------------+
| | | | +------------+
1397 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
1398 | | | | } |
| | | +-----+
| | | +----------------------------------------------+
1399 | | +--+ if(CompareText(ValData->Str,ValName) == 0){ |
| | | +--+-------------------------------------------+
1400 | | | +--- EndTuneSizeData = (int)ValData->dData;
| | | | +--------+
1401 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
1402 | | | | } |
| | | +-----+
1403 | | +--- // Add 2004/11/12 NN=xxx でもOKとした。Fittingサンプル
| | | +------------------------------------------------------+
1404 | | +--+ if(CompareText(ValData->Str,ValName+ValName) == 0){ |
| | | +--+---------------------------------------------------+
1405 | | | +--- EndTuneSizeData = (int)ValData->dData;
| | | +-+---+
1406 | | | | } |
| | | +-----+
| | +-+---+
1407 | | | } |
| | +-----+
| | +--------------------------------+
1408 | +--+ if(kk >= ValDataList->Count){ |
| | +--+-----------------------------+
1409 | | +--- MainF->err("parameter ("+ValName+"=)が設定されていません。");
| | | +----------+
1410 | | +--+ return; |
| | | +----------+
| | +-+---+
1411 | | | } |
| | +-----+
| +-+---+
1412 | | } |
| +-+---+
| +-+-------+
1412 | | else{ |
| +-+-------+
1413 | +--- EndTuneSizeData = (int)Pass4->ABCLib_ValList->Objects[idx];
| +-+---+
1414 | | } |
| +-----+
1415 +--- #if 1
1416 +--- //
1417 | // ここで、Parameter (XX=exp.)文と同じ形を追加する。
1418 | // ただし、基本パラメタ名と一致する部分は置き換える。
1419 | // 2009/02/25
1420 | //
| +--------------------------------------------+
1421 +--+ for(k = 0 ; k < ValDataList->Count ; k++){ |
| +--+-----------------------------------------+
1422 | +--- ValData = (TValData *)ValDataList->Items[k];
| | +----------------------+
1423 | +--+ if(ValData == NULL){ |
| | +--+-------------------+
| | | +------------+
1424 | | +--+ continue; |
| | | +------------+
| | +-+---+
1425 | | | } |
| | +-----+
| | +----------------------------------+
1426 | +--+ if(ValData->ParamValF == false){ |
| | +--+-------------------------------+
| | | +------------+
1427 | | +--+ continue; |
| | | +------------+
| | +-+---+
1428 | | | } |
| | +-----+
1429 | +--- ValName = ValData->Str;
| | +------------------------------------------------------------------------+
1430 | +--+ for(BaseValIdx = 0 ; BaseValIdx < BaseValList->Count ; BaseValIdx++){ |
| | +--+---------------------------------------------------------------------+
| | | +------------------------------------------------------------------+
1431 | | +--+ if(CompareText(BaseValList->Strings[BaseValIdx],ValName) == 0){ |
| | | +--+---------------------------------------------------------------+
| | | | +--------+
1432 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
1433 | | | | } |
| | | +-----+
| | +-+---+
1434 | | | } |
| | +-----+
| | +--------------------------------------------------------------------------------------------------+
1435 | +--+ if(BaseValIdx >= BaseValList->Count){ // パラメタ名とは一致しない。値がそのままセットされる。 |
| | +--+-----------------------------------------------------------------------------------------------+
| | | +------------------------------------+
1436 | | +--+ if(ValData->DataType != dt_Real){ |
| | | +--+---------------------------------+
1437 | | | +--- fprintf(fp," integer %s\n",ValName);
1438 | | | +--- fprintf(fp," parameter ( %s = %d )\n",ValName,(int)ValData->dData);
| | | +-+---+
1439 | | | | } |
| | | +-+---+
| | | +-+-------+
1439 | | | | else{ |
| | | +-+-------+
1440 | | | +--- fprintf(fp," real %s\n",ValName);
1441 | | | +--- fprintf(fp," parameter ( %s = %f )\n",ValName,ValData->dData);
| | | +-+---+
1442 | | | | } |
| | | +-----+
| | +-+---+
1443 | | | } |
| | +-+---+
| | +-+-----------------------------------------------------------------+
1443 | | | else if(BaseValIdx == 0){ // パラメタ名と一致。置き換えになる。 |
| | +-+-----------------------------------------------------------------+
1444 | | +--- ValName = BaseValList->Strings[0]+BaseValList->Strings[0]; // Exp. N->NN
1445 | | +--- fprintf(fp," integer %s\n",ValName);
1446 | | +--- fprintf(fp," parameter ( %s = %d )\n",ValName,EndTuneSizeData);
| | +-+---+
1447 | | | } |
| | +-+---+
| | +-+-------+
1447 | | | else{ |
| | +-+-------+
1448 | | +--- // 基本パラメータと置き換えする2つ目移行の変数 Exp NX,NY 等
1449 | | | // 変数定義のみ追加する。
| | | +------------------------------------+
1450 | | +--+ if(ValData->DataType != dt_Real){ |
| | | +--+---------------------------------+
1451 | | | +--- fprintf(fp," integer %s\n",ValName);
| | | +-+---+
1452 | | | | } |
| | | +-+---+
| | | +-+-------+
1452 | | | | else{ |
| | | +-+-------+
1453 | | | +--- fprintf(fp," real %s\n",ValName);
| | | +-+---+
1454 | | | | } |
| | | +-----+
| | +-+---+
1455 | | | } |
| | +-----+
1456 | +--- ParamValList->Add(ValName);
| +-+---+
1457 | | } |
| +-----+
1458 +--- #else
1459 +--- fprintf(fp," integer %s\n",PROB_VALNN);
1460 +--- fprintf(fp," parameter ( %s = %d )\n",PROB_VALNN,Data);
1461 +--- #endif
1462 +--- DefPosS = -1;
1463 +--- s = "";
| +--------------------------------------------+
1464 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
1465 | +--+ if(ArgValList->Strings[i] == ""){ |
| | +--+---------------------------------+
| | | +------------+
1466 | | +--+ continue; |
| | | +------------+
| | +-+---+
1467 | | | } |
| | +-----+
1468 | +--- ValData = (TValData *)ArgValList->Objects[i];
1469 | +--- ValName = ValData->Str;
1470 | +--- //
1471 | | // パラメータ文として追加済みと同名の変数は対象外とする。(名前で比較)
1472 | | // N->NN の場合の Nは置き換えを行っているため対象外となる。
1473 | | //
| | +----------------------------------------------------------------------------+
1474 | +--+ for(ParamValIdx = 0 ; ParamValIdx < ParamValList->Count ; ParamValIdx++){ |
| | +--+-------------------------------------------------------------------------+
| | | +--------------------------------------------------------------------+
1475 | | +--+ if(CompareText(ParamValList->Strings[ParamValIdx],ValName) == 0){ |
| | | +--+-----------------------------------------------------------------+
| | | | +--------+
1476 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
1477 | | | | } |
| | | +-----+
| | +-+---+
1478 | | | } |
| | +-----+
| | +----------------------------------------+
1479 | +--+ if(ParamValIdx < ParamValList->Count){ |
| | +--+-------------------------------------+
| | | +------------+
1480 | | +--+ continue; |
| | | +------------+
| | +-+---+
1481 | | | } |
| | +-----+
| | +------------------------------------------------------------------------+
1482 | +--+ for(BaseValIdx = 0 ; BaseValIdx < BaseValList->Count ; BaseValIdx++){ |
| | +--+---------------------------------------------------------------------+
| | | +------------------------------------------------------------------+
1483 | | +--+ if(CompareText(BaseValList->Strings[BaseValIdx],ValName) == 0){ |
| | | +--+---------------------------------------------------------------+
| | | | +--------+
1484 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
1485 | | | | } |
| | | +-----+
| | +-+---+
1486 | | | } |
| | +-----+
| | +------------------------------------------------------------+
1487 | +--+ if((BaseValIdx < BaseValList->Count)&&(BaseValIdx != 0)){ |
| | +--+---------------------------------------------------------+
| | | +------------+
1488 | | +--+ continue; |
| | | +------------+
| | +-+---+
1489 | | | } |
| | +-----+
| | +------------------------------+
1490 | +--+ if(TuneGroup == tgDynamic){ |
| | +--+---------------------------+
| | | +--------------------------------------+
1491 | | +--+ if(BaseValIdx < BaseValList->Count){ |
| | | +--+-----------------------------------+
| | | | +------------+
1492 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
1493 | | | | } |
| | | +-----+
| | +-+---+
1494 | | | } |
| | +-----+
| | +--------------------------------------------------------------------+
1495 | +--+ if((DefPosS == -1)||(ValData->DefPosS != DefPosS)){ // 違う定義行 |
| | +--+-----------------------------------------------------------------+
| | | +--------------+
1496 | | +--+ if(s != ""){ |
| | | +--+-----------+
1497 | | | +--- fprintf(fp,"%s\n",s.c_str());
1498 | | | +--- s = "";
| | | +-+---+
1499 | | | | } |
| | | +-----+
1500 | | +--- //
1501 | | | // Dimension属性 に対応するための N->NN への置換を定義文字列まで拡張した
1502 | | | // 2007/1/19
1503 | | | //
1504 | | +--- int j;
1505 | | |
1506 | | +--- s = "";
| | | +------------------------------+
1507 | | +--+ if(ValData->DefPosS != -1){ |
| | | +--+---------------------------+
| | | | +----------------------------------------------------------+
1508 | | | +--+ for(j = ValData->DefPosS ; j < ValData->DefPosE ; j++){ |
| | | | +--+-------------------------------------------------------+
1509 | | | | +--- Token = (TToken *)TokenList->Items[j];
1510 | | | | +--- ValName = Token->OrgStr;
| | | | | +------------------------------------------------------+
1511 | | | | +--+ if((Token->TokId == -1)||(Token->TokId == tid_Val)){ |
| | | | | +--+---------------------------------------------------+
| | | | | | +------------------------------------------------------------------------+
1512 | | | | | +--+ for(BaseValIdx = 0 ; BaseValIdx < BaseValList->Count ; BaseValIdx++){ |
| | | | | | +--+---------------------------------------------------------------------+
| | | | | | | +------------------------------------------------------------------+
1513 | | | | | | +--+ if(CompareText(BaseValList->Strings[BaseValIdx],ValName) == 0){ |
| | | | | | | +--+---------------------------------------------------------------+
| | | | | | | | +--------+
1514 | | | | | | | +--+ break; |
| | | | | | | | +--------+
| | | | | | | +-+---+
1515 | | | | | | | | } |
| | | | | | | +-----+
| | | | | | +-+---+
1516 | | | | | | | } |
| | | | | | +-----+
| | | | | | +--------------------------------------+
1517 | | | | | +--+ if(BaseValIdx < BaseValList->Count){ |
| | | | | | +--+-----------------------------------+
1518 | | | | | | +--- ValName = BaseValList->Strings[0]+BaseValList->Strings[0]; // Exp. N->NN
| | | | | | +-+---+
1519 | | | | | | | } |
| | | | | | +-----+
| | | | | +-+---+
1520 | | | | | | } |
| | | | | +-----+
1521 | | | | +--- s += ValName;
| | | | +-+---+
1522 | | | | | } |
| | | | +-----+
| | | +-+---+
1523 | | | | } |
| | | +-+---+
| | | +-+-------+
1523 | | | | else{ |
| | | +-+-------+
1524 | | | +--- s = GetDefStr(ValData);
| | | +-+---+
1525 | | | | } |
| | | +-----+
| | | +--------------+
1526 | | +--+ if(s == ""){ |
| | | +--+-----------+
| | | | +------------+
1527 | | | +--+ continue; |
| | | | +------------+
| | | +-+---+
1528 | | | | } |
| | | +-----+
1529 | | +--- DefPosS = ValData->DefPosS;
| | +-+---+
1530 | | | } |
| | +-+---+
| | +-+-------+
1530 | | | else{ |
| | +-+-------+
1531 | | +--- s += ",";
| | +-+---+
1532 | | | } |
| | +-----+
1533 | +--- s += " " + ValData->Str;
| | +--------------------------------------------------------------------+
1534 | +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){ |
| | +--+-----------------------------------------------------------------+
1535 | | +--- Token = (TToken *)TokenList->Items[j];
1536 | | +--- // Change for N or n 2007/1/19
1537 | | +--- ValName = Token->OrgStr;
| | | +------------------------------------------------------+
1538 | | +--+ if((Token->TokId == -1)||(Token->TokId == tid_Val)){ |
| | | +--+---------------------------------------------------+
| | | | +------------------------------------------------------------------------+
1539 | | | +--+ for(BaseValIdx = 0 ; BaseValIdx < BaseValList->Count ; BaseValIdx++){ |
| | | | +--+---------------------------------------------------------------------+
| | | | | +------------------------------------------------------------------+
1540 | | | | +--+ if(CompareText(BaseValList->Strings[BaseValIdx],ValName) == 0){ |
| | | | | +--+---------------------------------------------------------------+
| | | | | | +--------+
1541 | | | | | +--+ break; |
| | | | | | +--------+
| | | | | +-+---+
1542 | | | | | | } |
| | | | | +-----+
| | | | +-+---+
1543 | | | | | } |
| | | | +-----+
| | | | +--------------------------------------+
1544 | | | +--+ if(BaseValIdx < BaseValList->Count){ |
| | | | +--+-----------------------------------+
1545 | | | | +--- ValName = BaseValList->Strings[0]+BaseValList->Strings[0]; // Exp. N->NN
| | | | +-+---+
1546 | | | | | } |
| | | | +-----+
| | | +-+---+
1547 | | | | } |
| | | +-----+
1548 | | +--- s += ValName;
| | +-+---+
1549 | | | } |
| | +-----+
| +-+---+
1550 | | } |
| +-----+
| +--------------+
1551 +--+ if(s != ""){ |
| +--+-----------+
1552 | +--- fprintf(fp,"%s\n",s.c_str());
| +-+---+
1553 | | } |
| +-----+
1554 +--- fprintf(fp,"\n");
| +------------------------+
1555 +--+ if(FittingType != 0){ |
| +--+---------------------+
1556 | +--- fprintf(fp,"c !!!!!! fitting用\n");
1557 | +--- fprintf(fp,"c === for estimation using Least Square Method\n");
1558 | +--- fprintf(fp,"c === for sumipling data\n");
1559 | +--- fprintf(fp," real*8 xDim(0:ABCLibLSM_MAX_N-1, 0:ABCLibLSM_MAX_NPARM-1)\n");
1560 | +--- fprintf(fp," real*8 yEst(0:ABCLibLSM_MAX_N-1, 0:ABCLibLSM_MAX_NPARM-1)\n");
1561 | +--- fprintf(fp," real*8 x(0:ABCLibLSM_MAX_N-1)\n");
1562 | +--- fprintf(fp," real*8 y(0:ABCLibLSM_MAX_N-1)\n");
1563 | +--- fprintf(fp,"c === for target coefficients\n");
1564 | +--- fprintf(fp," real*8 a_lsm(0:ABCLibLSM_MAX_M)\n");
1565 | +--- fprintf(fp," real*8 aa_lsm(0:ABCLibLSM_MAX_M, 0:ABCLibLSM_MAX_NPARM-1)\n");
1566 | +--- fprintf(fp,"c !!!!!! fitting用終り\n");
| +-+---+
1567 | | } |
| +-----+
1568 +--- fprintf(fp,"\n");
1569 +--- fprintf(fp," integer iusw1\n");
1570 +--- // fprintf(fp," integer F1(%d)\n",CaseCount);
1571 +--- fprintf(fp," integer F1(%d)\n",CaseArrayCount);
1572 +--- fprintf(fp,"\n");
| +------------------------------+
1573 +--+ if(TuneGroup != tgDynamic){ |
| +--+---------------------------+
1574 | +--- fprintf(fp," integer iBestSw1\n");
| +-+---+
1575 | | } |
| +-----+
1576 +--- fprintf(fp,"\n");
1577 +--- fprintf(fp," real*8 t1, t2, t_all, bt\n");
1578 +--- fprintf(fp," real*8 dBestTime1\n");
1579 +--- fprintf(fp,"\n");
| +----------------------------------------------------------------------------------+
1580 +--+ if(MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-------------------------------------------------------------------------------+
1581 | +--- // この定義がないと do While等での型チェックで問題発生していた
1582 | +--- fprintf(fp," integer ABCLib_Eecntl_NextIndex\n");
1583 | +--- fprintf(fp," logical ABCLib_Eecntl_Continue\n");
| +-+---+
1584 | | } |
| +-----+
1585 |
| +--------------------------------+
1586 +--+ if(VisualF){ // Visualize = ON |
| +--+-----------------------------+
1587 | +--- // 格納用の ExecState() と読込み用の cbufを確保する。
1588 | +--- fprintf(fp," integer inum,iloop_v,LoopCount\n");
1589 | +--- fprintf(fp," integer ExecState(%d)\n",MainF->TuneRegionList->Count);
1590 | +--- fprintf(fp," character*100 cbuf\n");
1591 | +--- fprintf(fp," real*8 t_all_sum\n");
| +-+---+
1592 | | } |
| +-----+
1593 |
1594 +--- //
1595 | // FTN95で値が入っていない場合にエラーになったので値のセットを追加 2009/03/10
1596 | // 本来は PrePro指定等で行う方が正解と思われるが省略時でも動作可能とするために
1597 | // 追加した。パラメータ指定の変数は除く
1598 | //
1599 +--- fprintf(fp,"\n");
| +--------------------------------------------+
1600 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
1601 | +--+ if(ArgValList->Strings[i] == ""){ |
| | +--+---------------------------------+
| | | +------------+
1602 | | +--+ continue; |
| | | +------------+
| | +-+---+
1603 | | | } |
| | +-----+
1604 | +--- ValData = (TValData *)ArgValList->Objects[i];
1605 | +--- ValName = ValData->Str;
1606 | +--- //
1607 | | // パラメータ文として追加済みと同名の変数は対象外とする。(名前で比較)
1608 | | // N->NN の場合の Nは置き換えを行っているため対象外となる。
1609 | | //
| | +----------------------------------------------------------------------------+
1610 | +--+ for(ParamValIdx = 0 ; ParamValIdx < ParamValList->Count ; ParamValIdx++){ |
| | +--+-------------------------------------------------------------------------+
| | | +--------------------------------------------------------------------+
1611 | | +--+ if(CompareText(ParamValList->Strings[ParamValIdx],ValName) == 0){ |
| | | +--+-----------------------------------------------------------------+
| | | | +--------+
1612 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
1613 | | | | } |
| | | +-----+
| | +-+---+
1614 | | | } |
| | +-----+
| | +----------------------------------------+
1615 | +--+ if(ParamValIdx < ParamValList->Count){ |
| | +--+-------------------------------------+
| | | +------------+
1616 | | +--+ continue; |
| | | +------------+
| | +-+---+
1617 | | | } |
| | +-----+
| | +------------------------------------------------------------------------+
1618 | +--+ for(BaseValIdx = 0 ; BaseValIdx < BaseValList->Count ; BaseValIdx++){ |
| | +--+---------------------------------------------------------------------+
| | | +------------------------------------------------------------------+
1619 | | +--+ if(CompareText(BaseValList->Strings[BaseValIdx],ValName) == 0){ |
| | | +--+---------------------------------------------------------------+
| | | | +--------+
1620 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
1621 | | | | } |
| | | +-----+
| | +-+---+
1622 | | | } |
| | +-----+
| | +--------------------------------------+
1623 | +--+ if(BaseValIdx < BaseValList->Count){ |
| | +--+-----------------------------------+
| | | +------------+
1624 | | +--+ continue; |
| | | +------------+
| | +-+---+
1625 | | | } |
| | +-----+
1626 | +--- fprintf(fp," %s = 1\n",ValName);
| +-+---+
1627 | | } |
| +-----+
1628 |
1629 +--- fprintf(fp,"\n");
1630 +--- fprintf(fp,"c ---- file create\n");
1631 +--- fprintf(fp,"c -----------------------------------------\n");
1632 +--- fprintf(fp," if (myid .eq. 0) then\n");
1633 +--- fprintf(fp," open(11, status = 'replace',\n");
1634 +--- fprintf(fp," & file = 'ABCLib_%s%sParam.dat',\n",TuneGroupName,Name);
1635 +--- fprintf(fp," & action = 'write', pad= 'yes')\n");
1636 +--- fprintf(fp,"\n");
1637 +--- fprintf(fp," write (11, *) \"(%s\"\n",Name);
| +------------------------------+
1638 +--+ if(TuneGroup != tgDynamic){ |
| +--+---------------------------+
1639 | +--- fprintf(fp," write (11, *) \" (ABCLib_NUMPROCS \", ABCLib_NUMPROCS,\")\"\n");
1640 | +--- fprintf(fp," write (11, *) \" (ABCLib_SAMPDIST \", ABCLib_SAMPDIST,\")\"\n");
| +-+---+
1641 | | } |
| +-----+
1642 |
| +--------------------------------+
1643 +--+ if(VisualF){ // Visualize = ON |
| +--+-----------------------------+
1644 | +--- // 格納用の ExecState() の現在の値を読み込む。
1645 | +--- fprintf(fp,"\n");
1646 | |
| | +------------------------------+
1647 | +--+ if(TuneGroup != tgDynamic){ |
| | +--+---------------------------+
1648 | | +--- fprintf(fp," LoopCount = ABCLib_ENDTUNESIZE-ABCLib_STARTTUNESIZE\n");
1649 | | +--- fprintf(fp," LoopCount = LoopCount+ABCLib_SAMPDIST\n");
1650 | | +--- fprintf(fp," LoopCount = LoopCount/ABCLib_SAMPDIST\n");
| | +-+---+
1651 | | | } |
| | +-+---+
| | +-+-------+
1651 | | | else{ |
| | +-+-------+
1652 | | +--- fprintf(fp," LoopCount = 1\n");
| | +-+---+
1653 | | | } |
| | +-----+
1654 | +--- fprintf(fp,"\n");
1655 | |
1656 | +--- fprintf(fp," open(12, status = 'old',\n");
1657 | +--- fprintf(fp," & file = 'ABCLibATLog.dat',\n");
1658 | +--- fprintf(fp," & action = 'read', pad= 'yes')\n");
1659 | +--- fprintf(fp,"\n");
1660 | +--- fprintf(fp," do iloop_v = 1, %d\n",MainF->TuneRegionList->Count);
1661 | +--- fprintf(fp," read(12, *) cbuf\n");
1662 | +--- fprintf(fp," call ABCLibCharToNum(cbuf,inum)\n");
1663 | +--- fprintf(fp," ExecState(iloop_v) = inum\n");
1664 | +--- fprintf(fp," enddo\n");
1665 | +--- fprintf(fp," close(12, status = 'keep')\n");
1666 | +--- fprintf(fp,"\n");
1667 | |
1668 | +--- // 結果Logの書き出し用ファイルをOpen
1669 | +--- fprintf(fp," open(13, status = 'replace',\n");
1670 | +--- fprintf(fp," & file = 'ABCLibATLog_%s.dat',\n",Name);
1671 | +--- fprintf(fp," & action = 'write', pad= 'yes')\n");
1672 | +--- fprintf(fp," write (13, *) ABCLIB_NUMPROCS , \"NUMPROCS\"\n");
| | +------------------------------+
1673 | +--+ if(TuneGroup != tgDynamic){ |
| | +--+---------------------------+
1674 | | +--- fprintf(fp," write (13, *) ABCLib_STARTTUNESIZE, \"ABCLib_STARTTUNESIZE\"\n");
1675 | | +--- fprintf(fp," write (13, *) ABCLIB_ENDTUNESIZE, \"ABCLIB_ENDTUNESIZE\"\n");
1676 | | +--- fprintf(fp," write (13, *) ABCLIB_SAMPDIST, \"ABCLIB_SAMPDIST\"\n");
| | +-+---+
1677 | | | } |
| | +-+---+
| | +-+-------+
1677 | | | else{ |
| | +-+-------+
1678 | | +--- fprintf(fp," write (13, *) N, \"ABCLib_STARTTUNESIZE\"\n");
1679 | | +--- fprintf(fp," write (13, *) N, \"ABCLIB_ENDTUNESIZE\"\n");
1680 | | +--- fprintf(fp," write (13, *) 100, \"ABCLIB_SAMPDIST\"\n");
| | +-+---+
1681 | | | } |
| | +-----+
1682 | +--- fprintf(fp," write (13, *) -1, \"EndOfHeader\"\n");
1683 | +--- fprintf(fp,"\n");
| +-+---+
1684 | | } |
| +-----+
1685 |
1686 |
1687 +--- fprintf(fp," endif\n");
1688 +--- fprintf(fp,"c ----------------------------------------\n");
1689 +--- fprintf(fp,"\n");
1690 +--- fprintf(fp,"c ---- Start tune\n");
1691 +--- fprintf(fp,"c -----------------------------------------\n");
| +------------------------+
1692 +--+ if(FittingType != 0){ |
| +--+---------------------+
| | +--------------------------------------------+
1693 | +--+ for(i = 0 ; i < SampledList->Count ; i++){ |
| | +--+-----------------------------------------+
1694 | | +--- fprintf(fp," F1(%d)=%d\n",i+1,(int)SampledList->Items[i]);
| | +-+---+
1695 | | | } |
| | +-----+
1696 | |
1697 | +--- fprintf(fp,"\n");
1698 | +--- fprintf(fp,"c !!!!!! fitting用変数\n");
1699 | +--- fprintf(fp,"c !!! variedから推定する最大パラメタ組合せ数\n");
1700 | +--- fprintf(fp," nparm = %d\n",CaseCount);
1701 | +--- fprintf(fp,"\n");
1702 | +--- fprintf(fp,"c !!! パラメタの変化数 / sampled 指定子から算出\n");
1703 | +--- fprintf(fp," n_lsm = %d\n",SampledList->Count);
1704 | +--- fprintf(fp,"\n");
1705 | +--- fprintf(fp,"c !!! 行列サイズに関するサンプル点の個数\n");
1706 | +--- fprintf(fp," nsamp = 0\n");
1707 | +--- fprintf(fp," do iloop_n=ABCLib_STARTTUNESIZE,\n");
1708 | +--- fprintf(fp," & ABCLib_ENDTUNESIZE,\n");
1709 | +--- fprintf(fp," & ABCLib_SAMPDIST\n");
1710 | +--- fprintf(fp," nsamp = nsamp + 1\n");
1711 | +--- fprintf(fp," enddo\n");
1712 | +--- fprintf(fp,"\n");
1713 | +--- fprintf(fp,"\n");
1714 | +--- fprintf(fp,"\n");
1715 | +--- fprintf(fp,"c !!! fitting least squares で指定した次元数\n");
1716 | +--- fprintf(fp," m_lsm = %d\n",FittingDegree);
1717 | +--- fprintf(fp,"\n");
1718 | +--- fprintf(fp,"c !!! サンプリング点インデックス初期化\n");
1719 | +--- fprintf(fp," isamp_indx = 0\n");
1720 | +--- fprintf(fp,"\n");
1721 | +--- fprintf(fp,"c print *, \"nparm = \", nparm\n");
1722 | +--- fprintf(fp,"c print *, \"nsamp = \", nsamp\n");
1723 | +--- fprintf(fp,"c print *, \"m_lsm = \", m_lsm\n");
1724 | +--- fprintf(fp,"\n");
| +-+---+
1725 | | } |
| +-+---+
| +-+-------+
1725 | | else{ |
| +-+-------+
| | +------------------------------------+
1726 | +--+ for(i = 1 ; i <= CaseCount ; i++){ |
| | +--+---------------------------------+
1727 | | +--- fprintf(fp," F1(%d)=%d\n",i,i);
| | +-+---+
1728 | | | } |
| | +-----+
| +-+---+
1729 | | } |
| +-----+
| +--------------------------------+
1730 +--+ if(VisualF){ // Visualize = ON |
| +--+-----------------------------+
1731 | +--- fprintf(fp," t_all_sum = 0\n"); // 1秒以上のチェック
| +-+---+
1732 | | } |
| +-----+
| +------------------------------+
1733 +--+ if(TuneGroup != tgDynamic){ |
| +--+---------------------------+
1734 | +--- fprintf(fp," do iloop_n=ABCLib_STARTTUNESIZE,\n");
1735 | +--- fprintf(fp," & ABCLib_ENDTUNESIZE,\n");
1736 | +--- fprintf(fp," & ABCLib_SAMPDIST\n");
| +-+---+
1737 | | } |
| +-----+
1738 +--- fprintf(fp,"\n");
| +--------------------------------------------------------------------------------------+
1739 +--+ if(!MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-----------------------------------------------------------------------------------+
1740 | +--- fprintf(fp," do iloop_%s=1, %d\n",LowerCase(TuneGroupName),CaseArrayCount);
1741 | +--- fprintf(fp,"\n");
1742 | +--- fprintf(fp," iusw1 = F1(iloop_%s)\n",LowerCase(TuneGroupName));
1743 | +--- fprintf(fp,"\n");
| +-+---+
1744 | | } |
| +-+---+
| +-+-------+
1744 | | else{ |
| +-+-------+
1745 | +--- fprintf(fp," call ABCLib_Eecntl_Init(F1,%d)\n",CaseArrayCount);
1746 | +--- fprintf(fp," iBestSw1 = 0\n");
1747 | +--- fprintf(fp," do while ( .true.)\n");
1748 | +--- fprintf(fp," iusw1 = ABCLib_Eecntl_NextIndex()\n");
1749 | +--- fprintf(fp," if (iusw1 < 1 ) exit\n");
1750 | +--- fprintf(fp,"\n");
| +-+---+
1751 | | } |
| +-----+
1752 |
| +------------------------------+
1753 +--+ if(TuneGroup != tgDynamic){ |
| +--+---------------------------+
1754 | +--- #if 0
1755 | +--- // DOの終わり値の変数をセット << 修正 N 固定 2004/05/11 Select対応
1756 | +--- fprintf(fp," N = iloop_n\n");
1757 | +--- fprintf(fp," NX = iloop_n\n");
1758 | +--- fprintf(fp," NY = iloop_n\n");
1759 | +--- fprintf(fp," NZ = iloop_n\n");
1760 | +--- #else
| | +--------------------------------------------+
1761 | +--+ for(i = 0 ; i < BaseValList->Count ; i++){ |
| | +--+-----------------------------------------+
1762 | | +--- ValName = BaseValList->Strings[i];
1763 | | +--- fprintf(fp," %s = iloop_n\n",ValName.c_str());
| | +-+---+
1764 | | | } |
| | +-----+
1765 | +--- #endif
| +-+---+
1766 | | } |
| +-----+
1767 |
1768 +--- fprintf(fp,"\n");
1769 +--- s = GetPrePostSubregionStr(0);
| +--------------+
1770 +--+ if(s != ""){ |
| +--+-----------+
1771 | +--- fprintf(fp,"%s",s.c_str());
1772 | +--- fprintf(fp,"\n");
| +-+---+
1773 | | } |
| +-----+
| +----------------------+
1774 +--+ if(!MainF->NoMPIF){ |
| +--+-------------------+
1775 | +--- fprintf(fp," call MPI_BARRIER(MPI_COMM_WORLD, ierr)\n");
| +-+---+
1776 | | } |
| +-----+
| +----------------------------------+
1777 +--+ if(MainF->my_timer_start != ""){ |
| +--+-------------------------------+
1778 | +--- fprintf(fp," call %s()\n",MainF->my_timer_start);
| +-+---+
1779 | | } |
| +-----+
1780 +--- // fprintf(fp," t1 = MPI_WTIME()\n");
1781 +--- fprintf(fp," t1 = %s()\n",MainF->TimeFunc);
1782 +--- fprintf(fp,"\n");
1783 |
| +----------------------------------------------------------------------------------+
1784 +--+ if(MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-------------------------------------------------------------------------------+
1785 | +--- fprintf(fp," iloop_inner = 0\n");
1786 | +--- fprintf(fp," do while (ABCLib_Eecntl_Continue())\n");
1787 | +--- s = " call "+FuncName + "(";
| +-+---+
1788 | | } |
| +-+---+
| +-+-------+
1788 | | else{ |
| +-+-------+
1789 | +--- s = " call "+FuncName + "(";
| +-+---+
1790 | | } |
| +-----+
| +--------------------------------------------+
1791 +--+ for(i = 0 ; i < ArgValList->Count ; i++){ |
| +--+-----------------------------------------+
| | +------------------------------------+
1792 | +--+ if(ArgValList->Strings[i] == ""){ |
| | +--+---------------------------------+
| | | +------------+
1793 | | +--+ continue; |
| | | +------------+
| | +-+---+
1794 | | | } |
| | +-----+
1795 | +--- ValData = (TValData *)ArgValList->Objects[i];
1796 | +--- s += ValData->Str + ", ";
| +-+---+
1797 | | } |
| +-----+
1798 +--- // Mod 2007/1/19
1799 +--- // fprintf(fp,"%siusw1)\n",s.c_str());
1800 +--- s += "iusw1)";
1801 +--- s = SepLongStr(s);
1802 +--- fprintf(fp,"%s\n",s.c_str());
| +----------------------------------------------------------------------------------+
1803 +--+ if(MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-------------------------------------------------------------------------------+
1804 | +--- fprintf(fp," iloop_inner = iloop_inner + 1\n");
1805 | +--- fprintf(fp," end do\n");
| +-+---+
1806 | | } |
| +-----+
1807 |
1808 +--- fprintf(fp,"\n");
| +----------------------+
1809 +--+ if(!MainF->NoMPIF){ |
| +--+-------------------+
1810 | +--- fprintf(fp," call MPI_BARRIER(MPI_COMM_WORLD, ierr)\n");
| +-+---+
1811 | | } |
| +-----+
| +----------------------------------+
1812 +--+ if(MainF->my_timer_stop != ""){ |
| +--+-------------------------------+
1813 | +--- fprintf(fp," call %s()\n",MainF->my_timer_stop);
| +-+---+
1814 | | } |
| +-----+
1815 +--- // fprintf(fp," t2 = MPI_WTIME()\n");
1816 +--- fprintf(fp," t2 = %s()\n",MainF->TimeFunc);
1817 |
1818 +--- fprintf(fp," t_all = t2 - t1\n");
| +----------------------+
1819 +--+ if(!MainF->NoMPIF){ |
| +--+-------------------+
1820 | +--- fprintf(fp," call MPI_ALLREDUCE(t_all, bt, 1, MPI_DOUBLE_PRECISION,\n");
1821 | +--- fprintf(fp," & MPI_MAX, MPI_COMM_WORLD, ierr)\n");
| +-+---+
1822 | | } |
| +-+---+
| +-+-------+
1822 | | else{ |
| +-+-------+
1823 | +--- fprintf(fp," bt = t_all\n");
| +-+---+
1824 | | } |
| +-----+
| +--------------------------------------------------------------------------------------+
1825 +--+ if(!MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-----------------------------------------------------------------------------------+
1826 | +--- fprintf(fp," t_all = bt\n");
| +-+---+
1827 | | } |
| +-+---+
| +-+-------+
1827 | | else{ |
| +-+-------+
1828 | +--- fprintf(fp," t_all = bt / iloop_inner\n");
1829 | +--- fprintf(fp," call ABCLib_Eecntl_Repperf(iusw1, t_all)\n");
| +-+---+
1830 | | } |
| +-----+
1831 +--- fprintf(fp,"\n");
1832 |
1833 +--- s = GetPrePostSubregionStr(1);
| +--------------+
1834 +--+ if(s != ""){ |
| +--+-----------+
1835 | +--- fprintf(fp,"%s",s.c_str());
1836 | +--- fprintf(fp,"\n");
| +-+---+
1837 | | } |
| +-----+
1838 |
| +--------------------------------+
1839 +--+ if(VisualF){ // Visualize = ON |
| +--+-----------------------------+
1840 | +--- // 0から100(%)までの進行状態の値をセットする。
1841 | +--- fprintf(fp," if (myid .eq. 0) then\n");
1842 | +--- fprintf(fp," t_all_sum = t_all_sum + t_all\n"); // 1秒以上のチェック
1843 | +--- fprintf(fp," if(t_all_sum .ge. 1.0) then\n"); // 1秒以上のチェック
1844 | +--- fprintf(fp," t_all_sum = 0\n"); // 1秒以上のチェック
1845 | +--- fprintf(fp," inum = (iloop_n-ABCLib_STARTTUNESIZE)/ABCLib_SAMPDIST\n");
1846 | |
1847 | +--- fprintf(fp," ExecState(%d) = (100*inum+\n",MainF->TuneRegionList->IndexOf(this)+1);
1848 | +--- fprintf(fp," & 100*(iloop_%s-1)/%d)/LoopCount\n",
1849 | | LowerCase(TuneGroupName),
1850 | | CaseCount);
1851 | |
1852 | +--- // 格納用の ExecState() の現在の値を書き込む。
1853 | +--- fprintf(fp," open(12, status = 'replace',\n");
1854 | +--- fprintf(fp," & file = 'ABCLibATLog.dat',\n");
1855 | +--- fprintf(fp," & action = 'write', pad= 'yes')\n");
1856 | +--- fprintf(fp,"\n");
1857 | +--- fprintf(fp," do iloop_v = 1, %d\n",MainF->TuneRegionList->Count);
1858 | +--- fprintf(fp," write (12, *) ExecState(iloop_v)\n");
1859 | +--- fprintf(fp," enddo\n");
1860 | +--- fprintf(fp," close(12, status = 'keep')\n");
1861 | |
1862 | +--- fprintf(fp," endif\n"); // 1秒以上のチェック
1863 | +--- fprintf(fp," endif\n");
| +-+---+
1864 | | } |
| +-----+
1865 |
1866 +--- //
1867 | // According 指定がある場合は、計測時間を置き換える。
1868 | // 条件指定の場合(estimatedなし)には、条件が一致すれば time = 0
1869 | // 条件が一致しない場合は、かかった時間(0より大きい値)
1870 | // Accordingと varidの2重の場合には、 範囲で選択となる。
1871 | // 時間変数があると便利? 例えば、 ABCLib_TIME ???
1872 | //
| +--------------------+
1873 +--+ if(UseAccordingF){ |
| +--+-----------------+
1874 | +--- AnsiString aStr;
1875 | +--- TSubRegion *SubRegion;
1876 | +--- int cp1,cp2;
1877 | +--- int CaseIdx = 1;
1878 | |
| | +--------------------------------+
1879 | +--+ if(SubRegionList->Count != 0){ |
| | +--+-----------------------------+
1880 | | +--- fprintf(fp," select case(iusw1)\n");
| | | +----------------------------------------------+
1881 | | +--+ for(i = 0 ; i < SubRegionList->Count ; i++){ |
| | | +--+-------------------------------------------+
1882 | | | +--- SubRegion = (TSubRegion *)SubRegionList->Items[i];
1883 | | | +--- aStr = SubRegion->AccordingStr;
| | | | +------------------+
1884 | | | +--+ if(aStr == ""){ |
| | | | +--+---------------+
| | | | | +------------+
1885 | | | | +--+ continue; |
| | | | | +------------+
| | | | +-+---+
1886 | | | | | } |
| | | | +-----+
| | | | +--------------------------------+
1887 | | | +--+ if(SubRegion->CaseCount <= 1){ |
| | | | +--+-----------------------------+
1888 | | | | +--- fprintf(fp," case(%d)\n",CaseIdx++);
| | | | +-+---+
1889 | | | | | } |
| | | | +-+---+
| | | | +-+-------+
1889 | | | | | else{ |
| | | | +-+-------+
1890 | | | | +--- fprintf(fp," case(%d:%d)\n",CaseIdx,CaseIdx+SubRegion->CaseCount-1);
1891 | | | | +--- CaseIdx += SubRegion->CaseCount;
| | | | +-+---+
1892 | | | | | } |
| | | | +-----+
1893 | | | +--- cp1 = aStr.Pos("according") + strlen("according");
1894 | | | +--- cp2 = aStr.Pos("estimated");
| | | | +----------------+
1895 | | | +--+ if(cp2 != 0){ |
| | | | +--+-------------+
1896 | | | | +--- cp1 = cp2 + strlen("estimated");
1897 | | | | +--- aStr = Trim(aStr.SubString(cp1+1,aStr.Length()));
1898 | | | | +--- fprintf(fp," t_all = dble(%s)\n",aStr);
| | | | +-+---+
1899 | | | | | } |
| | | | +-+---+
| | | | +-+-----------------+
1899 | | | | | else{ // 条件式 |
| | | | +-+-----------------+
1900 | | | | +--- aStr = Trim(aStr.SubString(cp1+1,aStr.Length()));
1901 | | | | +--- fprintf(fp," if (%s) then\n",aStr);
1902 | | | | +--- fprintf(fp," t_all = 0\n");
1903 | | | | +--- fprintf(fp," endif\n");
| | | | +-+---+
1904 | | | | | } |
| | | | +-----+
| | | +-+---+
1905 | | | | } |
| | | +-----+
1906 | | +--- fprintf(fp," end select\n");
| | +-+---+
1907 | | | } |
| | +-+---+
| | +-+-------+
1907 | | | else{ |
| | +-+-------+
1908 | | +--- aStr = AccordingStr;
1909 | | +--- cp1 = aStr.Pos("according") + strlen("according");
1910 | | +--- cp2 = aStr.Pos("estimated");
| | | +----------------+
1911 | | +--+ if(cp2 != 0){ |
| | | +--+-------------+
1912 | | | +--- cp1 = cp2 + strlen("estimated");
1913 | | | +--- aStr = Trim(aStr.SubString(cp1+1,aStr.Length()));
1914 | | | +--- fprintf(fp," t_all = dble(%s)\n",aStr);
| | | +-+---+
1915 | | | | } |
| | | +-+---+
| | | +-+-----------------+
1915 | | | | else{ // 条件式 |
| | | +-+-----------------+
1916 | | | +--- aStr = Trim(aStr.SubString(cp1+1,aStr.Length()));
1917 | | | +--- fprintf(fp," if (%s) then\n",aStr);
1918 | | | +--- fprintf(fp," t_all = 0\n");
1919 | | | +--- fprintf(fp," endif\n");
| | | +-+---+
1920 | | | | } |
| | | +-----+
| | +-+---+
1921 | | | } |
| | +-----+
1922 | +--- fprintf(fp,"\n");
| +-+---+
1923 | | } |
| +-----+
1924 |
| +--------------------------------+
1925 +--+ if(VisualF){ // Visualize = ON |
| +--+-----------------------------+
1926 | +--- //
1927 | | // ビジュアル化のための結果出力
1928 | | // Sampledでとびとびの場合は、空白行を入れる。
1929 | | //
1930 | +--- fprintf(fp," if (myid .eq. 0) then\n");
1931 | +--- fprintf(fp," if (iloop .eq. 1) then\n");
1932 | +--- fprintf(fp," do iloop_vi = 1, F1(iloop_%s)-1\n",LowerCase(TuneGroupName));
1933 | +--- fprintf(fp," write (13, *)\n");
1934 | +--- fprintf(fp," enddo\n");
1935 | +--- fprintf(fp," endif\n");
1936 | +--- fprintf(fp," write (13, *) t_all\n");
1937 | +--- fprintf(fp," if (iloop .lt. %d) then\n",CaseArrayCount);
1938 | +--- fprintf(fp," do iloop_vi = F1(iloop_%s)+1, F1(iloop_%s+1)-1\n",
1939 | | LowerCase(TuneGroupName),LowerCase(TuneGroupName));
1940 | +--- fprintf(fp," write (13, *)\n");
1941 | +--- fprintf(fp," enddo\n");
1942 | +--- fprintf(fp," else\n");
1943 | +--- fprintf(fp," do iloop_vi = F1(iloop_%s)+1,%d\n",
1944 | | LowerCase(TuneGroupName),CaseCount);
1945 | +--- fprintf(fp," write (13, *)\n");
1946 | +--- fprintf(fp," enddo\n");
1947 | +--- fprintf(fp," endif\n");
1948 | +--- fprintf(fp," endif\n");
| +-+---+
1949 | | } |
| +-----+
| +--------------------+
1950 +--+ if(MainF->DebugF){ |
| +--+-----------------+
1951 | +--- fprintf(fp," if (ABCLib_DEBUG .ge. 1)then\n");
1952 | +--- fprintf(fp," if (myid .eq. 0) then\n");
1953 | +--- fprintf(fp," print *, \"N=\",iloop_n, \"iusw1=\", iusw1, t_all\n");
1954 | +--- fprintf(fp," endif\n");
1955 | +--- fprintf(fp," endif\n");
| +-+---+
1956 | | } |
| +-+---+
| +-+-------+
1956 | | else{ |
| +-+-------+
1957 | +--- fprintf(fp,"c if (ABCLib_DEBUG .ge. 1)then\n");
1958 | +--- fprintf(fp,"c if (myid .eq. 0) then\n");
1959 | +--- fprintf(fp,"c print *, \"N=\",iloop_n, \"iusw1=\", iusw1, t_all\n");
1960 | +--- fprintf(fp,"c endif\n");
1961 | +--- fprintf(fp,"c endif\n");
| +-+---+
1962 | | } |
| +-----+
1963 +--- fprintf(fp,"\n");
| +--------------------------------------------------------------------------------------+
1964 +--+ if(!MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-----------------------------------------------------------------------------------+
1965 | +--- fprintf(fp," if (iloop_%s .eq. 1) then\n",LowerCase(TuneGroupName));
| +-+---+
1966 | | } |
| +-+---+
| +-+-------+
1966 | | else{ |
| +-+-------+
1967 | +--- fprintf(fp," if (iBestSw1 == 0) then\n",LowerCase(TuneGroupName));
| +-+---+
1968 | | } |
| +-----+
1969 +--- fprintf(fp," dBestTime1 = t_all\n");
| +--------------------------------------------------------------------------------------+
1970 +--+ if(!MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-----------------------------------------------------------------------------------+
1971 | +--- fprintf(fp," iBestSw1 = F1(1)\n");
| +-+---+
1972 | | } |
| +-+---+
| +-+-------+
1972 | | else{ |
| +-+-------+
1973 | +--- fprintf(fp," iBestSw1 = iusw1\n");
| +-+---+
1974 | | } |
| +-----+
1975 +--- fprintf(fp," else\n");
1976 +--- fprintf(fp," if (t_all .lt. dBestTime1) then\n");
1977 +--- fprintf(fp," dBestTime1 = t_all\n");
| +--------------------------------------------------------------------------------------+
1978 +--+ if(!MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-----------------------------------------------------------------------------------+
1979 | +--- fprintf(fp," iBestSw1 = F1(iloop_%s)\n",LowerCase(TuneGroupName));
| +-+---+
1980 | | } |
| +-+---+
| +-+-------+
1980 | | else{ |
| +-+-------+
1981 | +--- fprintf(fp," iBestSw1 = iusw1\n");
1982 | |
| +-+---+
1983 | | } |
| +-----+
1984 +--- fprintf(fp," endif\n");
1985 +--- fprintf(fp," endif\n");
1986 +--- fprintf(fp,"\n");
| +------------------------+
1987 +--+ if(FittingType != 0){ |
| +--+---------------------+
1988 | |
1989 | +--- fprintf(fp,"c !!!!!! fitting用変数設定\n");
1990 | +--- fprintf(fp," x(iloop_install-1) = dble(F1(iloop_install))\n");
1991 | +--- fprintf(fp," y(iloop_install-1) = t_all\n");
1992 | +--- fprintf(fp,"\n");
1993 | +--- fprintf(fp,"c print *, iloop_install-1,x(iloop_install-1),y(iloop_install-1)\n");
1994 | +--- fprintf(fp,"\n");
| +-+---+
1995 | | } |
| +-----+
1996 +--- fprintf(fp," enddo\n");
| +----------------------------------------------------------------------------------+
1997 +--+ if(MainF->EECntlF){ // -eectrlのフラグ(ON時は、コントロール部分を置き換え) |
| +--+-------------------------------------------------------------------------------+
1998 | +--- fprintf(fp," call ABCLib_Eecntl_Fin\n");
| +-+---+
1999 | | } |
| +-----+
2000 +--- fprintf(fp,"\n");
2001 |
| +--------------------+
2002 +--+ if(MainF->DebugF){ |
| +--+-----------------+
2003 | +--- fprintf(fp," if (ABCLib_DEBUG .ge. 1)then\n");
2004 | +--- fprintf(fp," if (myid .eq. 0) then\n");
2005 | +--- fprintf(fp," print *, \"N=\",iloop_n, \"BestSw=\",iBestSW1\n");
2006 | +--- fprintf(fp," endif\n");
2007 | +--- fprintf(fp," endif\n");
| +-+---+
2008 | | } |
| +-----+
| +------------------------+
2009 +--+ if(FittingType != 0){ |
| +--+---------------------+
2010 | +--- fprintf(fp,"c ------ fitting処理\n");
2011 | +--- fprintf(fp,"\n");
2012 | +--- fprintf(fp,"c !!!! 以下のF1(%d) と %d は、sampledの個数と、variedの個数から判断\n"
2013 | | ,CaseArrayCount,CaseCount);
2014 | +--- fprintf(fp,"c -> sampledの点がvariedの全領域を調べているか判断し、\n");
2015 | +--- fprintf(fp,"c 全数判断していれば、最適値を選択\n");
2016 | +--- fprintf(fp," if (F1(%d) .eq. %d) then\n",CaseArrayCount,CaseCount);
2017 | +--- fprintf(fp,"c !!! sampled 指定子なし\n");
2018 | +--- fprintf(fp,"c === if all parameters are mesured or communication optimization\n");
2019 | +--- fprintf(fp,"c then this selects the mesured parameter.\n");
2020 | +--- fprintf(fp," if (myid .eq. 0) then\n");
2021 | +--- fprintf(fp," print *, \"All parameters are mesured. \"\n");
2022 | +--- fprintf(fp," print *, \"So, I will select the measured pararameter.\"\n");
2023 | +--- fprintf(fp," endif\n");
2024 | +--- fprintf(fp,"\n");
2025 | +--- fprintf(fp,"c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
2026 | +--- fprintf(fp,"c ! 変更点 !\n");
2027 | +--- fprintf(fp,"c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
2028 | +--- fprintf(fp,"c === using LSM\n");
2029 | +--- fprintf(fp,"c === Parameter Estimated routine for fixing dimansion\n");
2030 | +--- fprintf(fp,"c and add estimated costs for all range of the parameter\n");
2031 | +--- fprintf(fp," call ABCLibLSM_Est_ParamFxDim(x(0), y(0), n_lsm, m_lsm,\n");
2032 | +--- fprintf(fp," & a_lsm(0), iloop_n, nparm, isamp_indx,\n");
2033 | +--- fprintf(fp," & xDim(0,0), yEst(0,0), idummy)\n");
2034 | +--- fprintf(fp," isamp_indx = isamp_indx + 1\n");
2035 | +--- fprintf(fp," if (myid .eq. 0) then\n");
2036 | +--- fprintf(fp," print *, \"Best Parameter: \", iBestSW1\n");
2037 | +--- fprintf(fp," endif\n");
2038 | +--- fprintf(fp,"c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
2039 | +--- fprintf(fp,"c ! 変更点の終り !\n");
2040 | +--- fprintf(fp,"c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
2041 | +--- fprintf(fp,"\n");
2042 | +--- fprintf(fp," else\n");
2043 | +--- fprintf(fp,"\n");
2044 | +--- fprintf(fp,"c !!! sampled 指定子あり\n");
2045 | +--- fprintf(fp,"c === using LSM\n");
2046 | +--- fprintf(fp,"c === Parameter Estimated routine for fixing dimansion\n");
2047 | +--- fprintf(fp,"c and add estimated costs for all range of the parameter\n");
2048 | +--- fprintf(fp," call ABCLibLSM_Est_ParamFxDim(x(0), y(0), n_lsm, m_lsm,\n");
2049 | +--- fprintf(fp," & a_lsm(0), iloop_n, nparm, isamp_indx,\n");
2050 | +--- fprintf(fp," & xDim(0,0), yEst(0,0), iBestSW1)\n");
2051 | +--- fprintf(fp," isamp_indx = isamp_indx + 1\n");
2052 | +--- fprintf(fp," if (myid .eq. 0) then\n");
2053 | +--- fprintf(fp," print *, \"Estimated Best Parameter: \", iBestSW1\n");
2054 | +--- fprintf(fp," endif\n");
2055 | +--- fprintf(fp," endif\n");
2056 | +--- fprintf(fp,"c -----------------------------------------\n");
2057 | +--- fprintf(fp,"\n");
| +-+---+
2058 | | } |
| +-----+
2059 |
2060 +--- fprintf(fp,"c --- file write\n");
2061 +--- fprintf(fp," if (myid .eq. 0) then\n");
2062 +--- fprintf(fp," write (11, *) \" (ABCLib_PROBSIZE \", iloop_n, \" \"\n");
2063 +--- fprintf(fp," write (11, *) \" (%s_I \", iBestSw1,\")\"\n",Name);
2064 +--- fprintf(fp," write (11, *) \" )\"\n");
2065 +--- fprintf(fp," endif\n");
2066 +--- fprintf(fp,"c -----------------------------------------\n");
| +------------------------------+
2067 +--+ if(TuneGroup != tgDynamic){ |
| +--+---------------------------+
2068 | +--- fprintf(fp," enddo\n");
| +-+---+
2069 | | } |
| +-----+
2070 +--- fprintf(fp,"\n");
2071 +--- fprintf(fp,"c --- file close\n");
2072 +--- fprintf(fp," if (myid .eq. 0) then\n");
2073 +--- fprintf(fp," write (11, *) \")\"\n");
2074 +--- fprintf(fp," close(11, status = 'keep')\n");
2075 |
| +--------------------------------+
2076 +--+ if(VisualF){ // Visualize = ON |
| +--+-----------------------------+
2077 | +--- // 0から100(%)までの進行状態の値をセットする。
2078 | +--- fprintf(fp," ExecState(%d) = 100\n",
2079 | | MainF->TuneRegionList->IndexOf(this)+1);
2080 | +--- // 格納用の ExecState() の現在の値を書き込む。
2081 | +--- fprintf(fp," open(12, status = 'replace',\n");
2082 | +--- fprintf(fp," & file = 'ABCLibATLog.dat',\n");
2083 | +--- fprintf(fp," & action = 'write', pad= 'yes')\n");
2084 | +--- fprintf(fp,"\n");
2085 | +--- fprintf(fp," do iloop_v = 1, %d\n",MainF->TuneRegionList->Count);
2086 | +--- fprintf(fp," write (12, *) ExecState(iloop_v)\n");
2087 | +--- fprintf(fp," enddo\n");
2088 | +--- fprintf(fp," close(12, status = 'keep')\n");
2089 | |
2090 | +--- //
2091 | | // 結果をClose
2092 | | //
2093 | +--- fprintf(fp," close(13, status = 'keep')\n");
| +-+---+
2094 | | } |
| +-----+
2095 |
2096 +--- fprintf(fp," endif\n");
2097 +--- fprintf(fp,"c ---------------------------------------------\n");
2098 +--- fprintf(fp,"\n");
2099 |
2100 |
| +------------------------+
2101 +--+ if(FittingType != 0){ |
| +--+---------------------+
2102 | |
2103 | +--- fprintf(fp,"c !!!!!!!! fitting処理\n");
2104 | +--- fprintf(fp,"c === for LSM to estimate variable dimension\n");
2105 | +--- fprintf(fp,"c === Input xDim, yEst\n");
2106 | +--- fprintf(fp,"\n");
2107 | +--- fprintf(fp,"c if (myid. eq. 0) then\n");
2108 | +--- fprintf(fp,"c print *, \"nsamp=\",nsamp, \"/ nparm=\",nparm\n");
2109 | +--- fprintf(fp,"c do i=0, nsamp-1\n");
2110 | +--- fprintf(fp,"c write(6, 1919) (xDim(i,isw),isw=0, nparm-1)\n");
2111 | +--- fprintf(fp,"c enddo\n");
2112 | +--- fprintf(fp,"c print *, ""\n");
2113 | +--- fprintf(fp,"c do i=0, nsamp-1\n");
2114 | +--- fprintf(fp,"c write(6, 1919) (yEst(i,isw),isw=0, nparm-1)\n");
2115 | +--- fprintf(fp,"c enddo\n");
2116 | +--- fprintf(fp,"c 1919 format(' ', 20F10.5)\n");
2117 | +--- fprintf(fp,"c endif\n");
2118 | +--- fprintf(fp,"\n");
2119 | +--- fprintf(fp,"\n");
2120 | +--- fprintf(fp,"c === 全組合せ数がデータの総数となる。\n");
2121 | +--- fprintf(fp," n_lsm = nparm\n");
2122 | +--- fprintf(fp,"\n");
2123 | +--- fprintf(fp," call ABCLibLSM_lsm_DimEst(xDim(0,0), yEst(0,0),\n");
2124 | +--- fprintf(fp," & n_lsm, m_lsm, aa_lsm(0,0), nparm, nsamp)\n");
2125 | +--- fprintf(fp,"\n");
2126 | +--- fprintf(fp,"\n");
2127 | +--- fprintf(fp," do isw=1, nparm\n");
2128 | +--- fprintf(fp," do iii=0, nsamp-1\n");
2129 | +--- fprintf(fp," xDim(iii, isw-1)=0.0d0\n");
2130 | +--- fprintf(fp," enddo\n");
2131 | +--- fprintf(fp," enddo\n");
2132 | +--- fprintf(fp,"\n");
2133 | +--- fprintf(fp," do isw=1, nparm\n");
2134 | +--- fprintf(fp," do iii=0, nsamp-1\n");
2135 | +--- fprintf(fp," yEst(iii, isw-1)=0.0d0\n");
2136 | +--- fprintf(fp," enddo\n");
2137 | +--- fprintf(fp," enddo\n");
2138 | +--- fprintf(fp,"\n");
2139 | +--- fprintf(fp,"c === Output is aa_lsm.\n");
2140 | +--- fprintf(fp,"c === Output\n");
2141 | +--- fprintf(fp," if (myid .eq. 0) then\n");
2142 | |
2143 | +--- // fprintf(fp," open(10, status = 'replace', file = 'MyMM_I_LSM.dat',\n");
2144 | +--- fprintf(fp," open(10, status = 'replace', file = '%s_%c_LSM.dat',\n",Name,TuneGroupName[1]);
2145 | +--- fprintf(fp," & action = 'write', pad= 'yes')\n");
2146 | +--- fprintf(fp," endif\n");
2147 | +--- fprintf(fp," do isw=1, nparm\n");
2148 | +--- fprintf(fp," write (10, 1001) dble(isw),\n");
2149 | +--- fprintf(fp," & (aa_lsm(iii, isw-1), iii=0, m_lsm)\n");
2150 | +--- fprintf(fp," 1001 format(D20.10, 20D20.10)\n");
2151 | +--- fprintf(fp," enddo\n");
2152 | +--- fprintf(fp," close(10, status = 'keep')\n");
2153 | +--- fprintf(fp,"\n");
2154 | +--- fprintf(fp," if (myid .eq. 0) then\n");
2155 | +--- fprintf(fp," print *, \"Output Parameters ==============================\"\n");
2156 | +--- fprintf(fp," do isw=1, nparm\n");
2157 | +--- fprintf(fp," print *, \"Parameter No.: \", isw\n");
2158 | +--- fprintf(fp," print *, \"Sample Points: \", n_lsm, \" / Formula Order: \", m_lsm\n");
2159 | +--- fprintf(fp," print *, \"Calculated Coefficients: \"\n");
2160 | +--- fprintf(fp," do iii=0, m_lsm\n");
2161 | +--- fprintf(fp," print *, aa_lsm(iii, isw-1), \" * x^\", m_lsm-iii\n");
2162 | +--- fprintf(fp," enddo\n");
2163 | +--- fprintf(fp," enddo\n");
2164 | +--- fprintf(fp,"c === End of Output\n");
2165 | +--- fprintf(fp," endif\n");
2166 | +--- fprintf(fp,"c !!!!!!!! fitting処理の終り\n");
2167 | +--- fprintf(fp,"c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
2168 | +--- fprintf(fp,"\n");
2169 | |
| +-+---+
2170 | | } |
| +-----+
2171 |
2172 +--- fprintf(fp," return\n");
2173 +--- fprintf(fp," end\n");
2174 |
2175 +--- fprintf(fp,"c ==== End of %s Optimization Routines\n",TuneGroupName);
2176 +--- fprintf(fp,"c ==============================================================\n");
2177 +--- fprintf(fp,"\n");
2178 +--- fprintf(fp,"\n");
+-+---+
2179 | } |
+-----+