void Extract_Coord_E(char szName[], int Idx_Phi, int Idx_Part) { FILE *fIn, *fOut; int i, nAtom, ToRead=1, ReadItem, n_Rec=0; char szOutput[256], szErrorMsg[256], szLine[256], *ReadLine, szTag[256], ErrorMsg[256]; double E_QM, E_MM, Phi, Phi_Set, x_Save[MAX_ATOM], y_Save[MAX_ATOM], z_Save[MAX_ATOM]; nAtom = Mol.nAtom; memcpy(x_Save, Mol.x, sizeof(double)*nAtom); memcpy(y_Save, Mol.y, sizeof(double)*nAtom); memcpy(z_Save, Mol.z, sizeof(double)*nAtom); sprintf(szOutput, "tor-1D-idx-%d.dat", Idx_Phi+1); fOut = fopen(szOutput, "a+"); fseek(fOut, 0, SEEK_END); fIn = fopen(szName, "r"); if(fIn == NULL) { sprintf(szErrorMsg, "Fail to open %s\nQuit\n", szName); Quit_With_Error_Msg(szErrorMsg); } while(ToRead) { if(feof(fIn)) { break; } ReadLine = fgets(szLine, 256, fIn); if(ReadLine == NULL) { break; } else { // if(FindString(szLine, " Center Atomic Atomic")>=0) { // to extract the coordinate // Skip_N_Line(fIn, szName, 2); // if(FindString(szLine, " Input orientation:")>=0) { // to extract the coordinate if(FindString(szLine, " orientation:")>=0) { // to extract the coordinate Skip_N_Line(fIn, szName, 4); for(i=0; i<nAtom; i++) { ReadLine = fgets(szLine, 256, fIn); if(ReadLine == NULL) { break; } ReadItem = sscanf(szLine+31, "%lf %lf %lf", &(Mol.x[i]), &(Mol.y[i]), &(Mol.z[i])); if(ReadItem != 3) { ToRead = 0; break; } } } else if( (FindString(szLine, " SCF Done: ")>=0) && (QM_Level == QM_LEVEL_HF) ) { // HF E_QM = Get_Energy(szLine); } else if( (FindString(szLine, "EUMP2 =")>=0) && (QM_Level == QM_LEVEL_MP2) ) { E_QM = Get_Energy(szLine+27); } else if(FindString(szLine, " Optimization completed")>=0) { sprintf(szTag, " D(%d,%d,%d,%d)", DihList[Idx_Phi][0]+1, DihList[Idx_Phi][1]+1, DihList[Idx_Phi][2]+1, DihList[Idx_Phi][3]+1); To_Find_Tag(fIn, szName, szTag, szLine); ReadItem = sscanf(szLine+28, "%lf", &Phi_Set); // previous, modredundant if(ReadItem != 1) { sprintf(ErrorMsg, "Error in extracting the dihedral.\n%s\nQuit\n", szLine); Quit_With_Error_Msg(ErrorMsg); } Phi = Mol.QueryDihedral(IdxDihSelect[Idx_Phi]); E_MM = Mol.Cal_E(0); fprintf(fOut, "E_Scan %.13E %.13E Phi %.1lf\n", E_QM, E_MM, Phi); fprintf(fOut, "Coordinate\n"); for(i=0; i<nAtom; i++) { fprintf(fOut, "%12.6lf %12.6lf %12.6lf\n", Mol.x[i], Mol.y[i], Mol.z[i]); } n_Rec++; } } } fclose(fOut); fclose(fIn); memcpy(Mol.x, x_Save, sizeof(double)*nAtom); memcpy(Mol.y, y_Save, sizeof(double)*nAtom); memcpy(Mol.z, z_Save, sizeof(double)*nAtom); }
void AI_Control( WorldStuff *world_stuff, int vehicle_number ) { Player *player; team_type team, enemy_team; short frames_till_traitor_deactivate; short frames_till_unscramble; short scramble_life; short traitor_life; /* Alias pointer to this player */ player = world_stuff->player_array; frames_till_traitor_deactivate = player[vehicle_number].tank.frames_till_traitor_deactivate; frames_till_unscramble = player[vehicle_number].tank.frames_till_unscramble; scramble_life = player[vehicle_number].tank.scramble_life; traitor_life = player[vehicle_number].tank.traitor_life; if( player[vehicle_number].tank.team == RED_TEAM ) { team = RED_TEAM; enemy_team = BLUE_TEAM; } else { team = BLUE_TEAM; enemy_team = RED_TEAM; } if( player[vehicle_number].character.skill_level > 2 && player[vehicle_number].controller != USER_CONTROL ) { if( player[vehicle_number].tank.traitor_active ) if( frames_till_traitor_deactivate < (traitor_life - 40) ) player[vehicle_number].tank.traitor_active = FALSE; /* if( player[vehicle_number].tank.controls_scrambled ) if( frames_till_unscramble < (scramble_life - 40) ) player[vehicle_number].tank.controls_scrambled = FALSE; */ } if( player[vehicle_number].tank.traitor_active ) { player[vehicle_number].tank.team = enemy_team; player[vehicle_number].team = enemy_team; } /* Clear this players input table */ Clear_Input_Table( player[vehicle_number].table ); /* Fill up this players events data structure */ Update_Player_Events( world_stuff, vehicle_number ); /* Figure out what state we are in now */ world_stuff->player_array[vehicle_number].character.state = Find_State( world_stuff, vehicle_number ); if( player[vehicle_number].tank.traitor_active ) { world_stuff->player_array[vehicle_number].character.state = ATTACK; } /* Based on the state of the ai call appropriate control function */ switch( world_stuff->player_array[vehicle_number].character.state ) { case ATTACK: Attack( world_stuff, vehicle_number ); break; case GET_ENERGY: Get_Energy( world_stuff, vehicle_number ); break; case PANIC: Panic( world_stuff, vehicle_number ); break; case BEZERK: Bezerk( world_stuff, vehicle_number ); break; case HIDE: Hide( world_stuff, vehicle_number ); break; case GROUPUP: Group( world_stuff, vehicle_number ); break; case GET_PYLONS: Get_Pylons( world_stuff, vehicle_number ); break; case PROTECT: Protect( world_stuff, vehicle_number ); break; case KILL_RADAR_BASE: Kill_Radar_Base( world_stuff, vehicle_number ); break; case PROTECT_RADAR_BASE: Protect_Radar_Base( world_stuff, vehicle_number ); break; case EVADE: Evade( world_stuff, vehicle_number ); default: break; } /* End case */ if( player[vehicle_number].tank.traitor_active ) { player[vehicle_number].tank.team = team; player[vehicle_number].team = team; } if( player[vehicle_number].tank.vtype == Dragonfly ) Cloak_Override( world_stuff, vehicle_number ); if( player[vehicle_number].tank.vtype == Roach ) Mines( world_stuff, vehicle_number ); if( player_events[vehicle_number].memory.stuck ) Stuck_Override( world_stuff, vehicle_number ); } /* End of AI_Control */